设计模式之go语言实现
文章平均质量分 61
分享学习设计模式,使用go语言实现各种设计模式
cloudUncle
你认识我,我却不认识你
展开
-
设计模式go语言实现----职责链模式ChainOfResponsibility
1 定义职责链模式(Chain Of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。现实生活中有很多类似职责链模式的例子,比如我们在公司请假需要填写电子流给各个领导审批,如果请假时长比较短的时候,你的直属领导就有权力决定是否同意你请假,但是如果时间比较长的话,那...原创 2018-12-06 21:54:09 · 1422 阅读 · 0 评论 -
设计模式go语言实现----组合模式Composite
1 定义组合模式(Composite):将对象组合成树形结构以以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。UML类图:组合模式包含三个角色:Component:是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理ComponentLeaf:在组合中表示叶子节点对象,叶子节点没有子节点Compo...原创 2018-12-02 18:00:54 · 860 阅读 · 0 评论 -
设计模式go语言实现----备忘录模式Memento
1 定义备忘录(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态UML类图:备忘录模式包含三个角色:Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可以使用备忘录恢复内部状态。Originator可根据需要决定Memento存储Originato...原创 2018-11-25 22:31:32 · 449 阅读 · 0 评论 -
设计模式go语言实现----模板方法模式TemplateMethod
1 定义模板方法模式,定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤特点:通过把不变行为搬移到超类,去除子类中的重复代码,提供了一个很好的代码复用平台UML类图:2 go语言实现2.1 实现超类Person以及一个IPerson接口type IPerson interface { SetName...原创 2018-11-25 11:46:03 · 1062 阅读 · 0 评论 -
设计模式go语言实现----原型模式Prototype
1 定义原型模式(Prototype),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象UML类图:原型模式包含以下三个角色:Prototype(抽象原型类):它是声明克隆方法的接口,是所有具体原型类的公共父类,可以是抽象类也可以是接口,甚至还可以是具体实现类。ConcretePrototype(具体原型类):它实现在抽象原型类中声明的克隆方法,在克隆方法中返回自己...原创 2018-11-11 21:54:51 · 709 阅读 · 0 评论 -
设计模式go语言实现----策略模式Strategy
1 定义策略模式(Strategy):它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响道使用算法的客户。模式动机:为了解决在有多种算法相似的情况下,使用if…else所带来的复杂和难以维护性,这样定义一系列的算法,把它们一个个封装起来,并且使它们相互替换。策略模式包含以下几个角色:Context(环境类):负责使用算法策略,其中维持了一个抽象策略...原创 2018-11-10 12:02:01 · 445 阅读 · 0 评论 -
设计模式go语言实现----状态模式State
1 定义状态模式(State): 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类模式动机:当控制一个对象状态转换的条件表达式过于复杂时,将状态的判断逻辑转移道表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。UML类图:状态模式包含如下几个角色:Context(环境类):维护一个ConcreteState子类的实例,这个实例定义当前的状态State...原创 2018-11-04 08:31:23 · 1834 阅读 · 0 评论 -
设计模式go语言实现----观察者模式Observer
1 定义观察者模式(Observer):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个柱体对象,这个柱体对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己UML类图:...原创 2018-11-03 16:28:01 · 788 阅读 · 0 评论 -
设计模式go语言实现----中介者模式mediator
1 定义中介者模式(Mediator): 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间地交互模式动机:对于一个模块,可能由很多对象构成,而且这些对象之间可能存在相互的引用,为了减少对象两两之间复杂的引用关系,使之称为一个松耦合的系统,这就是中介者模式的模式动机UML类图:中介者模式包含以下四个角色:Med...原创 2018-11-03 13:55:40 · 857 阅读 · 0 评论 -
设计模式go语言实现----命令模式command
1 定义命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作模式动机:命令模式可以将发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。UML类图:命令模式包含以下四个角色:Receiver(接收者): 接收者执行与请求相...原创 2018-11-03 11:31:42 · 960 阅读 · 0 评论 -
设计模式go语言实现----代理模式proxy
1 定义代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问UML类图:代理模式主要包含以下三个角色:Subject(抽象主题角色):定义了Proxy和RealSubject的共用接口,这样就在任何使用RealSubject的地方都可以使用ProxyRealSubject(真实主题角色):定义了Proxy所代表的真实实体Proxy(代理主题角色):保存一个Sub...原创 2018-11-01 23:05:48 · 738 阅读 · 0 评论 -
设计模式go语言实现----享元模式flyweight
1 定义享元模式(Flyweight),运用共享技术有效地支持大量细粒度对象。系统只使用少量对象,而这些对象都很相似,状态变化很小,可以实现对象地多次复用。由于享元模式要求能够共享地对象必须是细粒度对象,因此又称为轻量级模式,是一种结构型模式定义如果不是很好理解地话,读者可以对照下面围棋地例子细细品味:围棋棋盘中包含大量的黑子和白子,它们形状、大小都一模一样,只是出现的位置不同而已。U...原创 2018-11-01 22:24:45 · 497 阅读 · 0 评论 -
设计模式go语言实现----外观模式facade
1 概念外观模式(facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。如果定义不是很理解的话,读者可以对照下面电脑的例子认真思考一下:电脑整机时CPU、内存、硬盘等的外观,有了这个外观之后,启动电脑和关闭电脑都简化了。UML类图:外观模式主要包含两个角色:Facade(外观角色): 在客户端可以调用这个角色的方法...原创 2018-11-01 20:44:28 · 553 阅读 · 0 评论 -
设计模式go语言实现----装饰模式decorator
我们每天早上起来都需要穿衣服,我们穿衣服的过程就是装饰自己的过程,而且我们可能每次穿衣服的顺序也不一样,比如有一天张三起床,他首先穿上红内裤,然后再穿上花裤衩,然后再穿上大码衬衫,然后穿上西装,然后就出门了;又有一天张三起床,首先穿上西裤,然后穿上红内裤,然后穿上花短袖,然后穿上棉服就出门了。在这个过程中,我们发现张三穿衣服的顺序以及衣服款式都是不固定的,非常灵活,想穿什么穿什么。既然穿衣可以这...原创 2018-10-31 08:08:07 · 1515 阅读 · 0 评论 -
设计模式go语言实现----适配器模式Adapter
在现实生活中,我们的笔记本电脑的工作电压大多数都是20V,而我国的家庭用电是220V,如何让20V的笔记本电脑能够工作在220V的电压下工作?答案:引入一个电源适配器,俗称变压器,有了这个电源适配器,生活用电和笔记本电脑即可兼容。软件开发的过程中,有时候也会存在这种不兼容的情况,我们也可以像引入一个称之为适配器的角色来协调这些存在不兼容的结构,即我们下面要讲的设配器模式。1 定义适配器(A...原创 2018-10-27 19:03:04 · 992 阅读 · 0 评论 -
设计模式go语言实现----桥接模式bridge
在现实生活中,我们画画的时候常常会用到两种或多种类型的笔,比如毛笔和蜡笔。假设我们需要大、中、小三种类型的画笔来绘制12种不同的颜色,如果我们使用蜡笔,那么我们需要准备3*12=36支蜡笔;但是如果我们使用毛笔的话,只需要3种型号的毛笔,外加12个颜料盒即可,涉及的对象个数仅为3+12=15。如果新增一种画笔,并且同样需要12种颜色,那么蜡笔需要增加12支,而毛笔却只需要新增1支。我们来分析一下...原创 2018-10-28 13:58:14 · 981 阅读 · 0 评论 -
设计模式go语言实现----构建者模式Builder
1 概念构建者模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示构建者模式包含如下角色:Product:具体产品ConcreteBuilder:具体建造者Builder:抽象建造者Director:指挥者读者可以对比以下构建者类图理解各种角色的作用2 go语言实现2.1 定义产品角色type BMWCar struct { Bran...原创 2018-10-27 12:21:07 · 518 阅读 · 0 评论 -
设计模式go语言实现----单例模式Singleton
1 单例模式定义保证一个类仅有一个实例,并提供一个访问它的全局访问点使用单例模式需要注意三个要点:某个类只能有一个实例这个类必须自行创建这个实例这个类必须自行向整个系统提供这个实例单例模式写法:饿汉式:类在*编译时*创建自己的实例懒汉式:类在*运行时*创建自己的实例依据以上,读者可以自行辨别下面的代码属于哪种写法2 单例模式的gol语言实现2.1 不考虑并发情况...原创 2018-10-25 21:00:47 · 473 阅读 · 0 评论 -
设计模式go语言实现----三类工厂模式Factory
本文主要讲解设计模式中的三类工厂模式:简单工厂模式(Simple Factory Pattern)工厂方法模式(Factory Method Pattern)抽象工厂模式(Abstract Factory Pattern)1 简单工厂模式图例分析:考虑一个简单的应用场景,这个应用场景可以提供很多形状(比如图中的Circle、Square、Rectangle),它们都源于一个Sha...原创 2018-10-22 21:59:07 · 720 阅读 · 0 评论