设计模式
一、设计原则
- 单一职责:一个类负责一类功能
- 开闭原则:对扩展开放,对修改封闭
- 里氏代换原则:所有使用父类的地方,都可以使用子类替换
- 依赖倒转:具体依赖抽象。两个关联的东西,都应该在外层有一个抽象封装,这样只需要修改内部实现,不影响关联。针对接口编程
- 接口隔离原则:一个接口负责一个功能
- 合成复用原则:少用继承,多用组合或聚合。继承破坏父类的封装、父类子类的耦合高
- 迪米特法则:最少知道法则,一个类只和直接关联类(成员变量,方法入参出参)打交道、减少一个类的公有方法隐藏自己
二、分类
- 创建型:工厂、抽象工厂、单例、原型、创建者
- 接口型:装饰者、代理、外观
- 行为型:模板方法、策略
三、举例
- 单例
- 实现:恶汉、懒汉+双重检查+volitail、静态内部类(内部类的延迟加载)、枚举
- 破坏:反射调构造方法、序列化(改写readResolv返回原实例)、克隆(改写clone方法返回原实例)
- 原型
- 实现:浅拷贝(实现Cloneable接口)、深拷贝(类和属性需要实现Serializable接口)
- 模板
- 应用:父类定义一个方法的具体流程,第一步第二步第三步、子类自定义实现。订单列表:XX公司员工/普通用户
- 构建者
- 应用:@Builder,当属性很多时,不需要写很多构造器,很方便的时候set方法
- 策略
- 应用:将父类/接口定义方法入参,传递入参时使用不同实现
- 装饰器
- 实现:装饰器类实现目标接口,内部持有原接口对象,在改写的方法里添加自己的逻辑,再调用原实现。
- 简单工厂
- 实现:在工厂内部,根据入参使用if else返回不同实例。一个简单工厂生成多个实例
- 工厂模式
- 实现:一个工厂生成一种实例
- 抽象工厂
- 实现:一个工厂生成一组关联实例,并在内部完成组装
- 应用:比如车,汽车抽象工厂(方向盘,沙发,轮子),自行车抽象工厂(座椅,轮子)
- 代理
- 应用:springAOP
- 外观:
- 应用:订单列表接口查询多个核心系统
人生就像蒲公英,看似自由,其实身不由己。