(22)手机软件何时统一——桥接模式

合成/聚合复用原则

尽量使用合成/聚合,尽量不要使用类继承。(摘抄)

其实合成/聚合复用原则,平时都会使用,但是自己总结可能有点总结不出来。这个原则用我的理解就是抽象与抽象之间划分必须明确,尽量不要让一个抽象去继承与另一个抽象,要让一个抽象去调用另一个抽象。

继承的使用必须要十分谨慎,因为使用继承之后,父类发生改变,必然会影响到子类。继承使用时必须要确定当前类和父类是有非常紧密的关系,不然会对当前类的复用产生很大的影响。要从当前类的职责来考虑问题。

聚合表示一种弱的“拥有”关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分;合成则是一种强的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的生命周一样。(摘抄)

合成/聚合复用原则的好处是,优先使用对象的合成/聚合将有助于你保持每个类被封装,并集中在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。(摘抄)

桥接模式

将抽象部分与它的实现部分分离,使它们都可以独立地变化。(摘抄)

这句话地意思应该是把它的每个功能和功能之间都分开。然后这些功能和整个物体的抽象也分开。

这个功能的说法并不是一定代表一个具体的功能,它是这个系统的某一个实现,暂且把实现就当成实现一个功能

//功能接口
public interface Implementor
{
	void Operation();
}
//功能的实现A&B
public class ConcreteImplA implements Implementor
{

	@Override
	public void Operation() {
		// TODO Auto-generated method stub
		System.out.println("A");
	}
	
}

public class ConcreteImplB implements Implementor
{

	@Override
	public void Operation() {
		// TODO Auto-generated method stub
		System.out.println("B");
	}
	
}
//整个物体的抽象
public class Abstract
{
	public Implementor implementor;

	public void setImplementor(Implementor implementor) {
		this.implementor = implementor;
	}
	
	public void Operation()
	{
		implementor.Operation();
	}
}
//某个子物体
public class RefinedAbstract extends Abstract
{
	@Override
	public void Operation()
	{
		//可以添加特有的一些操作
		
		
		implementor.Operation();
	}
}

class Client
{
	public static void main()
	{
		Abstract ab = new RefinedAbstract();
		
		ab.setImplementor(new ConcreteImplA());
		ab.Operation();
		
		ab.setImplementor(new ConcreteImplB());
		ab.Operation();
	}
}

实现系统啃呢个有多种角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。(摘抄)—— 感觉这句话总结得很精辟。

文章导航