设计模式

设计模式(Design Pattern)代表了最佳的实践,设计模式的每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必重新发明轮子。设计模式教程首先会介绍设计原则接下来介绍GOF的23种面向对象设计模式以及各种语言的实现,同时也会有设计模式相关的面试题,最后介绍多线程设计模式和其他设计模式,如架构模式。

访问者模式go语言

admin阅读(1180)赞(3)

访问者模式可以给一系列对象透明的添加功能,并且把相关代码封装到一个类中。 对象只要预留访问者接口Accept则后期为对象添加功能的时候就不需要改动对象。 visitor.go package visitor import "fmt" typ...

责任链模式go语言

admin阅读(1320)赞(2)

职责链模式用于分离不同职责,并且动态组合相关职责。 Golang实现职责链模式时候,因为没有继承的支持,使用链对象包涵职责的方式,即: 链对象包含当前职责对象以及下一个职责链。 职责对象提供接口表示是否能处理对应请求。 职责对象提供处理函数...

备忘录模式go语言

admin阅读(1032)赞(1)

备忘录模式用于保存程序内部状态到外部,又不希望暴露内部状态的情形。 程序内部状态使用窄接口船体给外部进行存储,从而不暴露程序实现细节。 备忘录模式同时可以离线保存内部状态,如保存到数据库,文件等。 memento.go package me...

状态模式go语言

admin阅读(801)赞(1)

状态模式用于分离状态和行为。 state.go package state import "fmt" type Week interface { Today() Next(*DayContext) } type DayContext str...

策略模式go语言

admin阅读(972)赞(1)

定义一系列算法,让这些算法在运行时可以互换,使得分离算法,符合开闭原则。 strategy.go package strategy import "fmt" type Payment struct { context *PaymentCon...

模板方法模式go语言

admin阅读(1288)赞(2)

模版方法模式使用继承机制,把通用步骤和通用方法放到父类中,把具体实现延迟到子类中实现。使得实现符合开闭原则。 如实例代码中通用步骤在父类中实现(准备、下载、保存、收尾)下载和保存的具体实现留到子类中,并且提供 保存方法的默认实现。 因为Go...

迭代器模式go语言

admin阅读(856)赞(1)

送代器模式用于使用相同方式送代不同类型集合或者隐藏集合类型的具体实现。 可以使用送代器模式使遍历同时应用送代策略,如请求新对象、过滤、处理对象等。 iterator.go package iterator import "fmt" type...

命令模式go语言

admin阅读(847)赞(1)

命令模式本质是把某个对象的方法调用封装到对象中,方便传递、存储、调用。 示例中把主板单中的启动(start)方法和重启(reboot)方法封装为命令对象,再传递到主机(box)对象中。于两个按钮进行绑定: 第一个机箱(box1)设置按钮1(...

观察者模式go语言

admin阅读(757)赞(1)

观察者模式用于触发联动。 一个对象的改变会触发其它观察者的相关动作,而此对象无需关心连动对象的具体实现。 obserser.go package observer import "fmt" type Subject struct { obs...

中介者模式go语言

admin阅读(786)赞(1)

中介者模式封装对象之间互交,使依赖变的简单,并且使复杂互交简单化,封装在中介者中。 例子中的中介者使用单例模式生成中介者。 中介者的change使用switch判断类型。 mediator.go package mediator impor...

桥接模式go语言

admin阅读(636)赞(1)

桥接模式分离抽象部分和实现部分。使得两部分独立扩展。 桥接模式类似于策略模式,区别在于策略模式封装一系列算法使得算法可以互相替换。 策略模式使抽象部分和实现部分分离,可以独立变化。 bridge.go package bridge impo...

装饰者模式go语言

admin阅读(740)赞(1)

装饰模式使用对象组合的方式动态改变或增加对象行为。 Go语言借助于匿名组合和非入侵式接口可以很方便实现装饰模式。 使用匿名组合,在装饰器中不必显式定义转调原对象方法。 decorator.go package decorator type ...

享元模式go语言

admin阅读(913)赞(0)

享元模式从对象中剥离出不发生改变且多个实例需要的重复数据,独立出一个享元,使多个对象共享,从而节省内存以及减少对象数量。 flyweight.go package flyweight import "fmt" type ImageFlywe...

组合模式go语言

admin阅读(633)赞(0)

组合模式统一对象和对象集,使得使用相同接口使用对象和对象集。 组合模式常用于树状结构,用于统一叶子节点和树节点的访问,并且可以用于应用某一操作到所有子节点。 composite.go package composite import "fm...

代理模式go语言

admin阅读(741)赞(0)

代理模式用于延迟处理操作或者在进行实际操作前后进行其它处理。 代理模式的常见用法有 虚代理 COW代理 远程代理 保护代理 Cache 代理 防火墙代理 同步代理 智能指引 等。。。 proxy.go package proxy type ...

适配器模式go语言

admin阅读(654)赞(0)

适配器模式用于转换一种接口适配另一种接口。 实际使用中Adaptee一般为接口,并且使用工厂函数生成实例。 在Adapter中匿名组合Adaptee接口,所以Adapter类也拥有SpecificRequest实例方法,又因为Go语言中非入...

外观模式go语言

admin阅读(611)赞(0)

API 为facade 模块的外观接口,大部分代码使用此接口简化对facade类的访问。 facade模块同时暴露了a和b 两个Module 的NewXXX和interface,其它代码如果需要使用细节功能时可以直接调用。 facade.g...

单例模式go语言

admin阅读(652)赞(0)

使用懒惰模式的单例模式,使用双重检查加锁保证线程安全 singleton.go package singleton import "sync" //Singleton 是单例模式类 type Singleton struct{} var s...

原型模式go语言

admin阅读(720)赞(0)

原型模式使对象能复制自身,并且暴露到接口中,使客户端面向接口编程时,不知道接口实际对象的情况下生成新的对象。 原型模式配合原型管理器使用,使得客户端在不知道具体类的情况下,通过接口管理器得到新的实例,并且包含部分预设定配置。 prototy...

建造者模式go语言

admin阅读(749)赞(0)

将一个复杂对象的构建分离成多个简单对象的构建组合 builder.go package builder //Builder 是生成器接口 type Builder interface { Part1() Part2() Part3() } ...

抽象工厂模式go语言

admin阅读(610)赞(0)

抽象工厂模式用于生成产品族的工厂,所生成的对象是有关联的。 如果抽象工厂退化成生成的对象无关联则成为工厂函数模式。 比如本例子中使用RDB和XML存储订单信息,抽象工厂分别能生成相关的主订单信息和订单详情信息。 如果业务逻辑中需要替换使用的...

工厂方法模式go语言

admin阅读(588)赞(1)

工厂方法模式使用子类的方式延迟生成对象到子类中实现。 Go中不存在继承 所以使用匿名组合来实现 factorymethod.go package factorymethod //Operator 是被封装的实际类接口 type Operat...

简单工厂模式go语言

admin阅读(823)赞(0)

go 语言没有构造函数一说,所以一般会定义NewXXX函数来初始化相关类。 NewXXX 函数返回接口时就是简单工厂模式,也就是说Golang的一般推荐做法就是简单工厂。 在这个simplefactory包中只有API 接口和NewAPI函...

访问者模式|极客教程

访问者模式

admin阅读(4868)赞(6)

访问者模式(Visitor Pattern)是一种行为型设计模式, 访问者模式能将算法与其所作用的对象隔离开来。在访问者模式(Visitor Pattern)中,使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以...

模板方法模式|极客教程

模板方法模式

admin阅读(3003)赞(5)

模板方法模式(Template Method Pattern)是一种行为设计模式, 它在超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。模板方法模式,定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法...

策略模式|极客教程

策略模式

admin阅读(4391)赞(8)

策略模式(Strategy Pattern)是一种行为设计模式, 它能让你定义一系列算法, 并将每种算法分别放入独立的类中, 以使算法的对象能够相互替换。策略模式定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立...

状态模式|极客教程

状态模式

admin阅读(3813)赞(5)

状态模式(State Pattern)是一种行为设计模式, 让你能在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样。状态模式允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象...

观察者模式|极客教程

观察者模式

admin阅读(3543)赞(8)

观察者模式(Observer Pattern)是一种行为设计模式, 允许你定义一种订阅机制, 可在对象事件发生时通知多个 “观察” 该对象的其他对象。观察者模式定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆...

备忘录模式|极客教程

备忘录模式

admin阅读(2893)赞(4)

备忘录模式(Memento Pattern)是一种行为设计模式, 允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。备忘录模式在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保...

中介者模式|极客教程

中介者模式

admin阅读(2923)赞(3)

中介者模式(Mediator Pattern)是一种行为设计模式, 能让你减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互, 迫使它们通过一个中介者对象进行合作。中介者模式用一个中介对象来封装一系列的对象交互,中介者使各对象...

近期文章