合成/聚合復用原則,盡量使用合成/聚合,盡量不要使用類繼承。
聚合(Aggregation)表示一種弱的‘擁有’關系,體現的是A對象可以包含B對象但B對象不是A對象的一部分。
合成(Composition)則是一種強的'擁有'關系,體現了嚴格的部分和整體關系,部分和整體的生命周期一樣。
優先使用對象的合成/聚合將有助於你保持每個類被封裝,並被集中在單個任務上,這樣類和類繼承層次會保持較小規模,而且不太可能增長為不可控制的龐然大物。
繼承是一種強耦合的結構。子類隨父類改變而改變,一定要在是‘is-a’的關系在考慮使用。
橋接模式(Bridge),將抽象部分與它實現部分分離,使它們都可以獨立地變化。
package bridge; public abstract class Imp { public abstract void operation(); }
package bridge; public class ConcreteImpA extends Imp { @Override public void operation() { System.out.println("ConcreteImpA operation"); } }
package bridge; public class ConcreteImpB extends Imp { @Override public void operation() { System.out.println("ConcreteImpB operation"); } }
package bridge; public abstract class Imp { public abstract void operation(); }
package bridge; public class RefinedAbstraction extends Abstraction { public static void main(String[] args) { Abstraction abstraction=new RefinedAbstraction(); abstraction.setImp(new ConcreteImpA()); abstraction.operation(); abstraction.setImp(new ConcreteImpB()); abstraction.operation(); } }
實現系統可能有多角度分類,每一種分類都有可能變化,那么就把這種多角度分離出來讓它們獨立變化,減少它們之間的耦合。