设计模式分为三种类型,共23类。
(1)创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
(2)结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
(3)行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。
6大设计原则
单一职责原则(类和方法,接口)
类、接口、方法的职责单一-
里式替换原则(基类和子类之间的关系)
父类出现的地方,可以完全使用子类替代,不影响软件功能:- 子类重写(overwrite)父类方法时,输出结果的类型应当<=父类方法的。
- 子类重载(overload)父类方法时,输入参数的类型应当>父类方法的。
依赖倒置原则(依赖抽象接口,而不是具体对象)
面向接口编程接口隔离原则(接口按照功能细分)
接口不能过于庞大,按照模块功能拆分接口迪米特法则(类与类之间的亲疏关系)
朋友类:成员变量、方法参数、返回 的类。
一个类只和朋友类打交道
一个类尽量少暴露public
方法,外界对自己了解的越少越好
思考能否加上final
修饰,能加尽量加开闭原则(扩展开放,修改关闭)
设计模式
- 工厂方法模式
抽象出构造对象的方法,作为工厂模板,对象的new过程细节交由工厂实现来处理。 - 抽象工厂模式
产品有N个产品族,在抽象工厂类中就应该有N个创建方法,不同的产品族对应不同的产品抽象,产品族的抽象之间如果有共性,它们可以实现共同的上一级产品抽象约束。 - 模板方法模式
抽象类实现一些模板方法的业务逻辑,子类可以不关心模板方法的实现细节,但是可以通过模板成员变量或者其他抽象方法,影响抽象类中模板方法的执行。 - 建造者模式
和工厂方法模式类似,也是用来创建对象的,但是它更关注对象创建细节以及创建过程的定制。 - 代理模式
普通代理、动态代理 - 原型模式
通过原型拷贝创建新的对象。在内存二进制流的拷贝,要比直接new一个对象性能好很多,特别是在一个循环体内产生大量的对象时。直接在内存中拷贝,构造函数不会执行。要使用clone方法,类的成员变量上不要增加final关键字。要注意浅拷贝深拷贝的问题。 - 中介者模式
用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。在类图中出现了蜘蛛网结构,就要考虑使用中介者模式,有利于把蜘蛛网梳理成星型结构。 - 命令模式
调用者角色与接收者角色之间没有任何依赖关系,调用者实现功能时调用Command抽象的execute方法,Command的构造时会传入接收者角色,execute中通知到接收者,实现了调用者和接收者的解耦。 - 责任链模式
- 装饰模式
装饰类继承被装饰类,可以扩展被装饰类的功能,并且被装饰类不知道装饰类的存在。同时装饰类持有被装饰类对象,内部的行为可以复用被装饰类。 - 策略模式
定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。每一个策略都是一个类。
策略枚举:
public enum Calculator {
ADD("+") {
public int exec(int a,int b) {
return a+b;
}
}
SUB("+") {
public int exec(int a,int b) {
return a+b;
}
}
String value = "";
private Calculator(String _value) {
this.value = _value;
}
public abstract int exec(int a,int b);
}