模版模式(Template)
介绍
模版模式:模版模式在抽象类或父类中抽象出算法步骤作为模版,模版的具体推迟到子类实现。
·模版模式在父类或抽象类中定义了一个算法骨架,并在父类或抽象类中实现共同的部分,各个不同的步骤由不同的子类分别实现;
·模版模式在父类的算法步骤中定义钩子(hook),在子类中判断并定义一些不是非通用步骤;
·模版模式与策略模式的不同之处在于,策略模式是针对多个不同的算法,而模版算法是针对一个算法的不同步骤,在模版模式中,只有一个算法。
场景
·多个算法有多个共同之处,但某些步骤略微不同;
·各子类步骤顺序一致,但步骤的具体实现有所不同;
实现
1.有发邮件和发短信两种通讯方式;
2.它们都需要目标信息,格式化正文、填写发送方信息,但实现不同;
3.在信息类中抽象三个步骤,具体的处理方式由两种通讯方式各自实现;
4.发送信息时调用信息类中的发送方式,发送方法会按照顺序自动调用对应的步骤;
迭代器模式(Iterator)
介绍
迭代器模式:迭代器模式允许调用者在不知道类内部实现的情况下遍历类元素。
·迭代器接口常用方法有length(),next(),previous(),remove()等;
·各类在内部实现迭代器接口,用对应方法操作元素;
·调用者不考虑内部实现,调用迭代器接口即可;
场景
·类使用不同的数据结构存储数据;
·需要对不同的数据类型进行遍历等操作;
实现
1.使用slice存储一列战马,使用map存储一列士兵;
2.战马和士兵结构都实现了迭代器接口;
3.获取战马数和士兵数,遍历战马和士兵,调用迭代器接口即可;
组合模式(Composite)
介绍
组合器模式:使用一种组件抽象来同时表达集合与元素,使用统一的接口来管理集合和元素。
·组合模式通常为树结构,父节点和子节点具有同样的抽象和接口;
·在操作集合时,会同时操作集合所属的具体元素;
·通常给组合模式添加一个迭代器来完成组合结构的迭代;
场景
·管理的多个对象构成树型层级结构;
·操作高层级的对象时,需要同时操作其所属的下级对象,如界面窗口等;
实现
1.将军、队长、士兵构成树型层级结构,且他们都是战士,拥有战斗方法;
2.每位展示都保存着自己的下级名单,没有下级时忽略;
3.每个人在战斗时,都会率领着下级战斗;
状态模式(State)
介绍
状态模式:状态模式抽象出一个事物的状态作为类,解耦事物和不同的状态下的行为;
·状态模式通过替换状态对象作为状态转换的方式;
·状态对象实现根据状态动作的接口,可以根据不同的动作做出对应的反应;
·状态模式和策略模式的实现相似,但状态模式是对类内部状态做出改变,而策略模式是针对算法封装;
场景
·事物有多种状态,且可以相互转换;
·事物多种状态下对同一动作做出的行为不同;
实现
1.植物有幼苗、开花和成熟三种状态,且它们会通过浇水和收获的动作进行相互转换;
2.幼苗和开花时不能收获,只能浇水,成熟状态只能收获,不需要浇水;
3.定义三种状态,和它们对不同动作时的行为,植物通过三种对象的替换来进行状态转换;
代理模式(Proxy)
介绍
代理模式:给对象提供一个代理,由代理对象控制对原对象的调用;
·代理模式为一个对象创建另外一个类作为其访问的接口,所有对真实对象的请求都通过代理当对象完成;
·代理模式可以被用作:远程代理、虚拟代理,安全代理,指针引用,延迟加载;
场景
·对象无法被直接访问时;
·对象过大、初始化较慢;
·对象不必要立刻初始化,可使用默认值代替;
实现
1.小名给暗恋对象写了一封信,在等回信;
2.邮递员是个非常忙的人,来不及去收取回信;
3.小名好声好气向快递员要回信时,邮递员都推托说自己要去取;
4.小名发怒了,邮递员终于抽时间去取了信给小名;
5.此信中邮递员就是代理模式中的代理,她实现了懒加载;
6.回信内容见源码
桥接模式(Bridge)
介绍
桥接模式:将事务的多个纬度都抽象出来以解耦抽象与实际之间的绑定关系,使抽象和实际向着不同纬度改变;
·桥接模式通过对象的组合来解决事物的多维度变化问题,以替代多继承的不灵活;
·桥接模式可以轻易在多维度上扩展,为不改变原有模式;
·桥接模式与策略模式的不同之处:策略模式是针对一个不变的主题替换抽象算法,而桥接模式是策略磨死的高纬度状态,它的主题也可能会被替换;
场景
·某事物在多个纬度上都有变化;
·无法使用多继承或使用多继承会很不灵活;
实现
1.作画时可以使用铅笔和圆珠笔等不同的笔,也可以在宣纸或普通A4纸;
2.抽象出笔和纸两种对象;
3.自由组合笔和纸进行作画;
建造者模式(Builder)
介绍
建造者模式:建造者模式分离创建复杂对象的过程和细节,使得同样的创建过程能创建不同的对象。
·建造者模式将创建对象部件的一般过程抽象出接口,而由不同的建造者类实现具体的接口,实现过程的步骤;
·通过建造者,调用者不用考虑对象创建过程的细节,而建造者也可以被灵活替换;
·与模版模式的区别:建造者模式使用类的组合进行对象的创建,而模版模式使用类的继承实现对象的具体构造;
·与工厂模式的区别,工厂模式会返回一个具体类,而建造者模式会建造出一个由多个类组装而成的完整类;
场景
·对象的创建包含其他对象为类元素,创建过程复杂;
·多个复杂对象的创建过程具有高度相似性;
实现
1.中国式建筑有金色屋顶和红色大门,而意式建筑有圆顶和白色大门;
2.中国建筑师和意式建筑师分别擅长建造不同类型的建筑;
3.我们在盖不同类型的房子时先创建一个建筑师,再用建筑师去创建对应风格的房子;
参考:
https://www.yuque.com/docs/share/fe586f05-e352-45b0-986c-0548a2a6c2bb