23种设计模式总览
创建型模式
结构型模式
- 外观模式(Facade)
- 适配器模式(Adapter)
- 代理模式(Proxy)
- 组合模式(Composite)
- 享元模式(Flyweight)
- 装饰模式(Decorator)
- 桥接模式(Bridge)
行为型模式
- 中介者模式(Mediator)
- 观察者模式(Observer)
- 命令模式(Command)
- 迭代器模式(Iterator)
- 模板方法模式(Template Method)
- 策略模式(Strategy)
- 状态模式(State)
- 备忘录模式(Memento)
- 解释器模式(Interpreter)
- 职责链模式(Chain of Responsibility)
- 访问者模式(Visitor)
模式介绍
定义
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
使用场景
- 相同的方法,不同的执行顺序,产生不同的事件结果时;
- 多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时;
- 产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候使用建造者模式非常合适;
一个常用的使用方式,就是当一个类构造器需要传入很多参数时,如果创建这个类的实例,代码可读性会非常差,而且很容易引入错误,此时就可以利用 builder模式进行重构,示例代码:
未使用builder模式前
public class Computer {
private String cpu;
private String screen;
private String memory;
private String mainBoard;
public Computer(String cpu, String screen, String memory, String mainBoard) {
this.cpu = cpu;
this.screen = screen;
this.memory = memory;
this.mainBoard = mainBoard;
}
}
使用builder模式后
public class NewComputer {
private String cpu;
private String screen;
private String memory;
private String mainBoard;
public static final class Builder {
private NewComputer mNewComputer;
public Builder() {
mNewComputer = new NewComputer();
}
public Builder cpu(String val) {
mNewComputer.cpu = val;
return this;
}
public Builder screen(String val) {
mNewComputer.screen = val;
return this;
}
public Builder memory(String val) {
mNewComputer.memory = val;
return this;
}
public Builder mainBoard(String val) {
mNewComputer.mainBoard = val;
return this;
}
public NewComputer create() {
return mNewComputer;
}
}
}
class Test {
public static void main(String[] args) {
//非Builder 模式
Computer computer = new Computer("cpu", "screen", "memory", "mainboard");
//Builder 模式
NewComputer newComputer = new NewComputer.Builder()
.cpu("cpu")
.screen("screen")
.memory("memory")
.mainBoard("mainBoard")
.create();
}
}
上面的示例代码只是传入四个参数,如果参数是几十个甚至更多,builder 模式的优势将会更加明显,传递参数更加灵活,代码具有更高的可读性.
代码地址:
- Github:github.com/leifu1107/a…