
设计模式
justinsun221
这个作者很懒,什么都没留下…
展开
-
Go Template Method 模板模式
package mainimport "fmt"// Template Method 模式是一种非常常见的基础性的设计模式,在面向对象的系统中有着大量的应用// 该模式时通过晚期绑定来是想框架及应用程序之间的松耦合。// ==============================抽象可扩展实现=========================================// ...原创 2019-06-05 22:45:21 · 131 阅读 · 0 评论 -
Go Facade外观(门面)设计模式
*动机(Motivation)上述A方案的问题在于组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战。如何简化外部客户程序和系统间的交互接口?如何将外部客户程序的演化和内部子系统的变化之间的依赖相互解耦?模式定义为子系统中的一组接口提供一个一致(稳定)的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易...原创 2019-06-10 22:02:17 · 337 阅读 · 0 评论 -
Go Singleton 单例模式
package mainimport ( "fmt" "time")type Singleton struct { instance *Singleton}// 非线程安全版本Singletonfunc (s *Singleton) GetInstance() *Singleton{ if s.instance == nil{ s.instance = &Si...原创 2019-06-10 12:49:47 · 258 阅读 · 0 评论 -
Go Builder 建造者模式
Builder 构建器动机(Motivation)在软件系统中,有时候面临“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?C++中构造函数...原创 2019-06-10 11:09:39 · 939 阅读 · 0 评论 -
Go Prototype 原型模式
模式定义使用原型实例制定创建对象的种类,然后通过拷贝这些原型来创建新的对象。——《设计模式》GoF动机(Motivation)在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。如何应对这种变化?如何向“客户程序(使用这些对象的程序)”隔离出“这些易变对象”,从而使得“依赖这些易变对象的客户程序”不随...原创 2019-06-09 23:41:06 · 254 阅读 · 0 评论 -
GO AbstractFactory 抽象工厂
模式定义提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。——《设计模式》GoF要点总结如果没有对应“多系列对象构建”的需求变化,则没有必要使用Abstract Factory 模式,这时候使用简单的工厂完全可以。“系列对象”指的是在某一特定系列下的对象之间相互依赖、或作用的关系。不同系列的对象之间不能相互依赖。Abstract Factory 模...原创 2019-06-09 16:37:23 · 283 阅读 · 0 评论 -
Go Factory工厂模式
package mainimport "fmt"// 工厂设计模式:通过“对象创建”模式绕开new,来避免对象创建new过程中所导致紧耦合情况// (依赖具体类),从而支持创建对象的稳定。它是接口抽象之后的第一步工作// 外部调用type Calculate struct { of OperateFactory}func (c *Calculate) Calc (i,j i...原创 2019-06-08 22:59:21 · 795 阅读 · 0 评论 -
Go SimpleFactory 简单工厂模式
package mainimport "fmt"// 我先实现一个简单工厂模式,这种模式不属于GOF23种经典设计模式,它的缺点是违背“开闭原则”// 运算接口type Operater interface { Operate()}// 加法运算type AddOperate struct {}func (a *AddOperate) Operate(){ fmt.P...原创 2019-06-08 17:09:58 · 166 阅读 · 0 评论 -
Go Bridge 桥接模式
package mainimport "fmt"// Bridge模式 属于单一职责,主要解决在继承的情况下,子类急剧膨胀,难以维护。// 而Bridge模式,改继承为组合// 在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。// 如何设计类似于 Photoshop 这样的软件,能画不同形状和不同颜色的图形呢?// 如果用继承方式,m 种形状和 n ...原创 2019-06-08 10:18:15 · 2824 阅读 · 0 评论 -
Go Decorator装饰设计模式
package mainimport "fmt"// 定义一个刘接口type Stream interface { // 读流 ReadStream() //写流 WriterStream()}// 文件流type FileStream struct {}// 读文件流func (f *FileStream) ReadStream(){ fmt.Println...原创 2019-06-07 16:54:53 · 189 阅读 · 0 评论 -
Go Observer 观察者模式
package mainimport "fmt"// 定义对象间一种一对多(变化)的依赖关系,以便一个对象的状态发生改变的时候,所有依赖于它的对象都//得到通知并自动更新1// 定义一个观察者接口type IObserver interface { Notifiy()}// 定义一个被观察者type Observer struct { Name string}// 实...原创 2019-06-06 23:54:58 · 321 阅读 · 0 评论 -
Go Mediator中介者模式
Mediator 中介者动机(Motivation)在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。在这种情况下,我们可以使用一个“中介对象”来管理对象间的关联关系,避免相互交互的对象之间的紧耦合引用关系,从而更好的抵御变化。模式变化用一个中介对象来封装(封装变化)一系列的对象交互。...原创 2019-06-13 11:35:24 · 219 阅读 · 0 评论 -
Go Adapter 适配器模式
将一个类的接口转换成客户希望的另一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作Adapter模式主要应用于希望复用一些现存的类,但是现在新的接口又于复用环境要求不一致的情况,在遗留代码复用、类库迁移等方面非常有用。GOF23定义了两种Adapter模式的实现结构,分别为类Adapter和对象Apadter,主要区别在,类Adapter是用多继承,不灵...原创 2019-06-12 21:48:37 · 619 阅读 · 0 评论 -
Go Proxy代理模式
代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问\代理模式主要包含以下三个角色:Subject(抽象主题角色):定义了ProxySubject 和RealSubject的共用接口ISubjectProxy,这样就在任何使用RealSubject的地方都可以使用ProxySubjectRealSubject(真实主题角色):定义了ProxySubject 所代表的真实实体...原创 2019-06-12 20:27:34 · 2181 阅读 · 0 评论 -
Go Strategy 策略设计模式
package mainimport "fmt"// Strategy 模式应用场景,在我们写的程序中,大多有if else的条件语句基本上都适合// Strategy 模式,但是if else 条件的情况是不变的,则不适合此模式,例如一周7天// Strategy 及其子类为组建提供了一系列可重用的算法,从而使得类型在运行时方便的根据// 需要在各个算法之间进行切换//一般的做...原创 2019-06-06 10:55:55 · 353 阅读 · 0 评论 -
go 实现发布订阅初步认知
package mainimport "fmt"// 主题type Topic struct { Title string content map[string][]string}// 发布主题type Publish interface { AddTopic(t *Topic) PublishTopic(t *Topic)}//订阅主题type Subcri...原创 2019-06-05 09:28:27 · 915 阅读 · 0 评论