package com.zwy;
/*合成/聚合复用的原则(carp)尽量使用合成/聚合,今年不要使用类的继承.
* 聚合表示一种弱的拥有关系,体现的是A对象可以包含B对象,但是B对象不是A对象的一部分,合成是一种强的
* 拥有关系,体现了严格的部分和整体的关系.部分和整体的生命周期一样.
* 注意L优先使用对象的合成/聚合将有助于你保持每个类被封装,并被集中在单个任务三,这样类和类的继承层次
* 会保持较小的规模,并且不太可能会正常位不可控制的庞然大物.
*
* 桥接模式:将抽象部分和他的实现部分分离,使他们都可以独立的变化.
* 什么叫做抽象和他的实现分离:将抽象部分和他的实现部分分离,这并不是让抽象类和其派生类分离,因为这没有
* 任何意义.实现是指,抽象类和他的派生类用来思想自己的对象.
* 注意:
* 思想系统可能多角度分类,每一种分类都有可能有变化,那么就把这种多角度分离出来让他们独立变化,减少它们之间的
* 耦合.
* 感觉就是一个类,有一个对象(拥有关系),这个对象使用基类定义的,而赋值的时候都使用基类的子类来赋值的.
* */
public class BridgeTest {
public static void main(String[] args) {
Abstraction abstraction = new RefinedAbstraction();
abstraction.setImplement(new ConcreteImplementorA());
abstraction.Operation();
abstraction.setImplement(new ConcreteImplementorB());
abstraction.Operation();
}
}
abstract class Implementor {
public abstract void Operation();
}
class ConcreteImplementorA extends Implementor {
public void Operation(){
System.out.println(this.getClass().getName() + " opreatrion");
}
}
class ConcreteImplementorB extends Implementor {
public void Operation(){
System.out.println(this.getClass().getName() + " opreatrion");
}
}
class Abstraction {
protected Implementor implement ;
public void setImplement(Implementor implement) {
this.implement = implement;
}
public void Operation() {
implement.Operation();
}
}
class RefinedAbstraction extends Abstraction{
@Override
public void Operation() {
System.out.println(this.getClass().getName() +":");
implement.Operation();
}
}