Design
- 创建型设计模式:负责对象的
实例创建
- 结构型设计模式:负责对象的
结构包装
- 行为型设计模式:负责对象的
行为控制
对象关系和UML类图
- 纵向关系(泛化关系)
- 继承
- 实现
- 横向关系(依赖关系)
- 依赖:两个对象是各自独立的关系
- 关联:两个对象是各自独立的关系
- 聚合:两个对象是整体和部分的关系(has-a)
- 组合:两个对象是整体和部分的关系(contains-a)
ps:聚合是弱组合,组合是强聚合,聚合中的被聚合的对象可以共享,组合中的被组合的对象不能共享
ps:依赖是弱关联,关联是强依赖,依赖是临时的和单向的,关联是长期的和双向的
Creator(创建型设计模式)
- 单例模式
- 原型模式
- 工厂模式
- 简单工厂
- 工厂方法
- 抽象工厂
- 建造者模式
ps:原型模式又叫克隆模式
Singleton(单例模式)
ps:枚举类单例可以防止单例被破坏(克隆、反射、序列化和反序列化)
饿汉式
1 | public class Singleton { |
懒汉式
1 | public class Singleton { |
双检查
1 | public class Singleton { |
内部类
1 | public class Singleton { |
枚举类
1 | public enum Singleton { |
Prototype(原型模式)
Factory(工厂模式)
Builder(建造者模式)
Structure(结构型设计模式)
- 代理模式:代理对象的访问
- 装饰模式:增强对象的功能
- 适配模式:对不兼容的对象进行包装
- 桥接模式:将接口和实现进行分离
- 外观模式:为复杂的系统提供统一的入口
- 组合模式:实现树形结构
- 享元模式:缓存对象并重复使用
ps:外观模式又叫门面模式
Behavior(行为型结构模式)
- 模版模式(父类实现公共的逻辑和子类实现不同的逻辑)
- 状态模式(根据不同的状态执行不同的操作)(可以用接口和实现类来消除if等条件语句)
- 策略模式(根据不同的选择执行不同的操作)(可以用接口和实现类来消除if等条件语句)
- 观察者模式(监听和接收状态的变化)
- 迭代器模式(迭代容器内部的元素)
- 责任链模式(链式处理问题)
- 命令模式(引入命令对象来解耦命令的发出者和接收者)
- 备忘录模式(备份和恢复对象)
- 中介者模式(引入中介对象来隐藏具体的服务提供者)
- 访问者模式
- 解释器模式