设计模式花园,通过最常用的实例帮助您快速学习和实践简单但功能强大的23种设计模式。
创建型模式是关于对象实例化的模式。
模式 | ** | 场景 | 优缺点 |
---|---|---|---|
1. 单例模式 | 一个类只有一个实例,并在类中提供一个访问它的全局访问点。解决了资源访问冲突问题、单例对象节约内存提高性能,适合频繁创建和销毁且创建时耗费很多资源的对象。 | 网站计数器、读取配置文件或数据库、工具类等。 | - |
2. 工厂模式 | 创建一个接口和一系列实现该接口的实体类,然后创建一个工厂类,由传入字符串类型判断实例化哪一个实体类。 | 1)日志记录器。选择哪种存储方式:硬盘、远程服务器等。2)数据库访问,选择哪类数据库进行链接。3)设计一个连接服务器的框架,选择哪种协议进行连接。 | - |
2. 抽象工厂模式 | 创建一个抽象工厂类和工厂生产类,根据传入字符串类型判断使用哪种工厂对象,然后工厂类传入字符串类型判断创建哪个类。 | - | - |
8. 构建器模式 | 构建器模式是使用多个简单对象链式构造一个复杂对象,一般在类中增加一个builder静态类,类中实现各种设置属性的方法。常用于链式形式初始化一个参数很多的对象。 | - | - |
14. 原型模式 | 原型模式又叫克隆模式,从当前对象克隆一个相同对象。 | Java内部自带原型模式,Object.clone()。 | - |
结构型模式是关于类和对象组合的模式。
模式 | ** | 场景 | 优缺点 |
---|---|---|---|
5. 外观模式 | 为子系统(子类)提供一个统一的界面(初始化子类,并提供子类方法)。(类似工厂模式,一个提供一个子类对象,一个提供多个子类对象方法) | - | - |
6. 组合模式 | 创建一个包含自己对象组的类,构建一个树形的层次结构。 | - | - |
7. 享元模式 | 提前创建好对象放入池子中,重复利用。 | 数据库连接池、JAVA中的string,如果有则返回,没有则创建一个字符串放入字符串缓存池中。 | - |
10. 适配器模式 | 适配器模式(包装器模式)是将类的接口转化为另一个类的接口。包括:类适配器模式和对象适配器模式。 类适配器是适配器继承类。对象适配器是适配器类构造方法传入原类对象,然后实现目标接口的方法对父类进行改写。 | 我们构造一个人猫适配器,实现人类与喵星人的对话。 | - |
12. 装饰器模式 | 装饰器模式是在不改变原类的情况下,添加新的功能(装饰)。具体做法是创建一个抽象类(装饰类)并传入原有的类,然后重写原有类方法。 | 1)扩展一个类的功能。2)替代继承。 | - |
18. 代理模式 | 代理模式是一个类代表另一个类的功能(继承也可以实现类似的功能,这里通过耦合来代替继承,实现解耦的目的)。 | 买茅台并不一定要去茅台厂买,可以去各种经销店购买。 | - |
19. 桥接模式 | 桥接模式将抽象部分(抽象类)和实现部分(类)分离,二者都可以独立的变化。具体做法是顶层两个抽象类,其中一个抽象类中聚合(构造函数传递)另一个抽象类的实现类,然后创建包含两种概念的对象。 | - | - |
行为型模式是关于多个类或对象通过协作共同完成一个任务的模式。行为模式包括对象行为模式或类行为模式。
模式 | ** | 场景 | 优缺点 |
---|---|---|---|
4. 策略模式 | 定义多个策略类,策略继承同一个策略接口,Context类方法可以根据传入的策略对象,调用不同的策略对象方法(Context初始化时,传入策略对象,然后调用策略对象方法)。 | - | - |
9. 模版模式(钩子函数、回调函数) | 模板模式是提供一个可作为模板的抽象类,具体做法是定义一个包含多个抽象方法和一个方法(作为模板方法)的抽象类,子类按需要实现抽象方法来完成模板方法。类似做菜的步骤,先定一个好一个模板,卖菜、洗菜、煮饭,然后通过子类中对这些步骤进行填充,来达到按需实现做菜整体过程的目的。 | - | - |
11. 命令模式(Action模式、事务) | 命令模式是使类继承具备撤销功能的抽象类,从而具有撤销功能。 | - | - |
13. 备忘录模式 | 保存一个对象当前状态,以便在适当的时候进行恢复。 | 游戏中的存档和读档。 | - |
15. 状态模式 | 状态模式中基于状态决定类的行为。具体做法是我们实现一个状态抽象类/接口,继承或实现的子类分别对应不同的状态,且子类中重写不同的方法。 | - | - |
16. 观察者模式 | 观察者模式又叫事件处理模式,一个对象的状态发生更改时,会通知所有依赖它的对象并自动更新。PS:钩子函数Hook、Callback、Listener、Observer本质上都是观察者模式。 | - | - |
17. 责任链模式 | 责任链模式是处理请求的模式,将多个处理器串成一条链,让请求在链上进行传递。 | 报销审批,在自己职责范围中的可以审批,然后扔给下一个审批者。 | - |
20. 迭代器模式 | 迭代器模式是顺序访问对象的各个元素,而又不用暴露对象的内部表示。 | - | - |
- 状态模式和策略模式的异同点?
- 代理模式和装饰器模式的异同点?
- 动态代理模式如何实现?
- 设计模式中何时用抽象类,何时用接口,二者可以替代使用吗?