设计模式与GO

原文链接:https://refactoringguru.cn/design-patterns/go代码可见:https://github.com/charles0212/design-patterns 创建型模式 创建型模式 模式描述 抽象工厂 Abstract Factory,让你能创建一系列相关的对象, 而无需指定其具体类。 生成器 Builder,使你能够分步骤创建复杂对象。 该模式允许你使用相同的创建代码生成不同类型和形式的对象。 工厂方法 Factory Method,在父类中提供一个创建对象的接口以允许子类决定实例化对象的类型。 原型 Protot ...

JDK设计模式(十七)命令模式

1、概述命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。 2、解决的问题用于“行为请求者”与“行为实现者”解耦,可实现二者之间的松耦合,以便适应变化。 3、模式中的角色1、命令(Command)角色:定义命令的接口,声明执行的方法。2、具体命令(ConcreteCommand)角色:命令接口实现对象,通常它会持有命令的接收者,通过调用接收者相应的功能方法来执行当前命令所要完成的操作。3、接收者(Receiver)角色:真正执行命令的对象。任何类都可以成为一个接收者,只要它能够实现命令要求实现的相应功能即可。4、请求者(Invoker) ...

JDK设计模式(十六)责任链模式

1、概述责任链模式避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。 2、解决的问题如果有多个对象都有可能接受请求,可以避免请求发送者与接收者耦合在一起。 3、模式中的角色1、抽象处理者角色(Handler): 定义一个处理请求的接口,和一个后继连接(可选)2、具体处理者角色(ConcreteHandler): 处理它所负责的请求,可以访问后继者,如果可以处理请求则处理,否则将该请求转给他的后继者。3、客户类(Client): 向一个链上的具体处理者 ConcreteHandler 对象提交请求。 4、模式解读责 ...

JDK设计模式(十五)迭代器模式

1. 概述迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。 2. 解决的问题把游走的任务放在迭代器上,而不是聚合上,这样简化了聚合的接口和实现,也让责任各得其所。 3. 模式中的角色1、抽象迭代器(Iterator):定义出遍历元素所需的接口。2、具体迭代器(ConcreteIterator):实现 Iterator 接口,并保持迭代过程中的游标位置。3、聚集(Aggregate):给出创建迭代器(Iterator)对象的接口。4、具体聚集(ConcreteAggregate):实现创建迭代器(Iterator)对象的接口,返回一个合适的具体迭代器实例。5、客户 ...

JDK设计模式(十四)观察者模式

1. 概述有时被称作发布/订阅模式,观察者模式定义了对象之间的一对多的依赖关系,这样一来,当一个对象改变状态时,它的所有依赖着都会收到通知并自动更新。 2. 解决的问题将一个系统分割成一个一些类相互协作的类有一个不好的副作用,那就是需要维护相关对象间的一致性。我们不希望为了维持一致性而使各类紧密耦合,这样会给维护、扩展和重用都带来不便。观察者就是解决这类的耦合关系的。 3. 模式中的角色1、抽象主题(Subject):它把所有观察者对象的引用保存到一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象。2、具体主题(ConcreteSubject ...

JDK设计模式(十三)模板方法模式

1、概述定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。 2、模式中的角色抽象模板类(AbstractTemplate):实现了模板方法,定义了算法的骨架。具体模板类(ConcreteTemplate):实现抽象类中的抽象方法,已完成完整的算法。 3、模式解读模板方式模式的类图如下所示模板方法中的方法可以分为两大类:模板方法和基本方法。模板方法,一个模板方法是定义在抽象类中的,把基本操作方法组合在一起形成一个总算法或一个总行为的方法。一个抽象类可以有任意多个模板方法,而不限于一个。每一个模板方法都可以调用任意多个具体方法。 ...

JDK设计模式(十二)策略模式

1、定义策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 2、解决的问题可以动态的改变对象的行为。 3、模式中的角色1、环境对象(context):该类中实现了对抽象策略中定义的接口或者抽象类的引用。2、抽象策略对象(Strategy):它可由接口或抽象类来实现。3、具体策略对象(ConcreteStrategy):它封装了实现同不功能的不同算法。利用策略模式构建应用程序,可以根据用户配置等内容,选择不同有算法来实现应用程序的功能。具体的选择有环境对象来完成。采用这种方式可以避免由于使用条件语句而带来的代码混乱,提高应用程序的灵活 ...

JDK设计模式(十一)代理模式

1、定义为另一个对象提供一个替身或占位符以控制对这个对象的访问。 2、解决的问题在某些情况下,一个对象不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用,提供额外的处理或者不同的操作。 3、模式中的角色1、抽象主题角色(Subject):声明真实对象和代理对象的共同接口;2、 代理角色(Proxy):代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。3、真实主题角色(RealSubject):代理角色所代 ...