golang 设计模式(续)

模版模式(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值