设计模式笔记
# 设计模式笔记:
创建型分三步:选择不同的工厂,工厂可以选择不同的方法,每个方法可以选择不同的入参
!简单工厂就是一个工厂多个方法(或一个方法,再由入参判断?)
!工厂方法就是多个工厂一个方法(入参不再用来区分生产哪个商品?)
!抽象工厂就是多个工厂多个方法(或一个方法,再由入参判断?)
!单例:设成类成员!
!!建造者:内部类弄个Builder,最后build()
!!原型:预先生成若干对象,需要时复制属性(可自定义个性化)得到新对象
!!享元:每次使用对象都在池里里拿,没有的就创建新的放进池里(类似Java的字符串池)
结构型:
!桥接:抽象类A的成员属性中有抽象类B的对象,则A与B可以分别进行扩展
!代理:A的成员属性中有类B的对象,A与B实现相同接口,外部调用时由调用B对象方法变成调用A对象方法,A对象内部在调用B对象方法前后实现加强
!适配器:外部调用接口不改,实现类B实现接口不改,适配方法是增加中间类A,A含有B类对象作为成员,且实现了外部接口的方法调用B的接口方法
!!装饰模式:与代理差不多
!!责任链模式:消费者抛出一个请求给链表表头,链中对象依次判断是否由自己处理,是则处理,否则传给下一项
!!门面模式:消费者调用简单的接口访问复杂的内部系统(与模板方法差不多)
!!组合模式:就是树中每个结点的形式,你返回根结点就相当于返回了一棵树
行为型:
!中介者:通讯双方中间加转发者
!观察者:所有观察者实例注册到客户端列表,客户端有改变时就会调用每个注册了的观察者回调方法
!!命令模式:就是把命令抽出来作为一个类而不是放在主体类(例如老师类)方法直接实现
!!状态模式:就是把状态抽出来作为一个类而不是放在主体类(例如天气类)方法直接实现
!!策略模式:就是把策略抽出来作为一个类而不是放在主体类(例如学习类)方法直接实现
!!解析器模式:就是把解析器抽象出来作为一个类而不是放在主体类(例如英语类)方法直接实现
!!备忘录模式:就是把备忘录抽象出来作为一个类而不是放在主体类(例如游戏存档类)方法直接实现
!!模板方法:就是把模板抽出来作为一个方法而不是直接写在一起,层次清晰方便业务与技术对接(与门面模式差不多)
!!迭代模式:就是迭代器,可以让所有容器统一遍历的接口