企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### 合成/聚合复用原则 尽量使用合成/聚合,尽量不要使用类继承。(摘抄) 其实合成/聚合复用原则,平时都会使用,但是自己总结可能有点总结不出来。这个原则用我的理解就是抽象与抽象之间划分必须明确,尽量不要让一个抽象去继承与另一个抽象,要让一个抽象去调用另一个抽象。 继承的使用必须要十分谨慎,因为使用继承之后,父类发生改变,必然会影响到子类。继承使用时必须要确定当前类和父类是有非常紧密的关系,不然会对当前类的复用产生很大的影响。要从当前类的职责来考虑问题。 聚合表示一种弱的“拥有”关系,体现的是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(); } } ~~~ 实现系统啃呢个有多种角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。(摘抄)—— 感觉这句话总结得很精辟。