(22)手机软件何时统一——桥接模式
最后更新于:2022-04-01 14:30:51
### 合成/聚合复用原则
尽量使用合成/聚合,尽量不要使用类继承。(摘抄)
其实合成/聚合复用原则,平时都会使用,但是自己总结可能有点总结不出来。这个原则用我的理解就是抽象与抽象之间划分必须明确,尽量不要让一个抽象去继承与另一个抽象,要让一个抽象去调用另一个抽象。
继承的使用必须要十分谨慎,因为使用继承之后,父类发生改变,必然会影响到子类。继承使用时必须要确定当前类和父类是有非常紧密的关系,不然会对当前类的复用产生很大的影响。要从当前类的职责来考虑问题。
聚合表示一种弱的“拥有”关系,体现的是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();
}
}
~~~
实现系统啃呢个有多种角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。(摘抄)—— 感觉这句话总结得很精辟。