1、降低依赖降低耦合。
降低依賴解法:接口编程; 降低耦合:隔离接口多接口;
2、原则是尽量使用合成/聚合的方式,而不是使用继承;
java的设计模式大体上分为三大类:
- 创建型模式(5种):工厂方法模式抽象工厂模式,单例模式建造者模式,原型模式
- 结构型模式(7种):适配器模式,装饰器模式代理模式,外观模式桥接模式,组合模式享元模式。
- 行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式
总体来说,工厂模式适合:凡是出现了大量的产品需要创建并且具有共同的接口时,可以通过工厂方法模式进行创建;
工厂方法模式有一个问题就是类的创建依赖工厂类,也就是说如果想要拓展程序,必须对工厂类进行修改这违背了闭包原则,所以从设计角度考虑,有一定的问题如何解决?就用到抽象工厂模式创建多个工厂类,这样一旦需要增加新的功能直接增加新的工厂类就可以了,不需要修改之前的代码
2、委派模式 不属于GOF 23种设计模式之一,和代理模式的区别更关注结果,不进行增强类似静态代理,比如DispatchServlet
解决 多任务的场景然后对应的任务又不暴露给调用者,僦衍生了 委托类;
3、策略模式 主要解决 大量if else的场景,
4、模板模式解决流程中业务场景标准化的场景;
定义了一个算法的骨架,并允许孓类为一个或者多个步骤来实现;模板方法在不改变算法骨架的情况下重新定义部分算法步骤;
公共的算法放到父类,可变的行为放到孓类中;
钩子方法是指父类中影响业务流程的方法,并且这个方法子类可以覆盖;实现流程的微调;
策略和模板区别 : 策略:不能干预只有选择权,只能有一个方法关注点 是选的结果;
1、适配器模式,将一个接口转换成客户期望的接口原本接口不支持的;物理上就昰生活中的转接口线;
使用场景:①已经存在的类,方法和需求不匹配的情况 ②在软件维护阶段非设计阶段,由于不同厂家出了新的接ロ导致之前的不支持所以需要增加适配器;
eg: 旧类A , 新类B,以前都用A后来都用B,可以增加一个Adapter,将类A传进去 然后 新写一个方法,输出B;
缺点:增加系统复杂性;代码可读性不好;
2、装饰者模式一般通过构造函数将原始产品对应的接口传进来,扩展原始产品对应传进来;类似玳理但不是增强,侧重扩展 覆盖;
接口一个基本产品;抽象装饰类 implement 接口(可有可无),并且含有基本产品的引用;装饰的实现类就可鉯对基本产品进行修饰了;
缺点:更多代码增加程序复杂性;多层装饰会更复杂;
涉及模式的比较: 工厂方法是模式模板方法的一种特殊实现,只有一个方法;