随笔分类 - GoLang
摘要:代理模式是一种结构型设计模式。这种模式建议在访问对象时,添加一个额外的控制层,以便更灵活智能得对访问进行管理。 在这种模式中,会实现主对象的接口创建一个新的代理类。这让我们在执行主对象的逻辑前可以做一些额外的行为。看两个例子吧: 1. 信用卡可以视为是银行账户的代理。它的操作逻辑和银行账户相同,但却
阅读全文
摘要:享元模式是一种结构型设计模式。当我们需要为一个类创建大量相同的对象时就可能会需要用到这种设计模式。这些对象被称为享元对象并且是不可变的。 我们先来看一个例子。看完这个例子后我想应该就可以对享元模式有一定了解了。 在《反恐精英》这个游戏中,恐怖分子(Terrorist)和反恐精英(Counter-Te
阅读全文
摘要:门面模式是一种结构型设计模式。这种模式的作用是隐藏系统底层的复杂逻辑,只提供一个简单易用的接口给调用者。通过门面模式,将系统底层所需要的各种接口整理为一个通用的接口以便于调用方使用。换句话说,就是门面模式为一个复杂系统做了更高层次的抽象。 门面这个词的释义为: 指商店房屋及沿街的部分,指店铺外表 以
阅读全文
摘要:装饰器模式是一种结构型设计模式。通过装饰器模式可以为一个对象添加额外的功能而不需对其作出调整。 还是通过具体的案例来了解装饰器模式:假设我们开了一家披萨店,现在店里主营两款披萨: 素食狂披萨(Veggie Mania Pizza) 活力豆腐披萨(Peppy Tofu pizza) 以上两款披萨有不同
阅读全文
摘要:定义 组合模式是一种结构型设计模式。 当我们想把一组对象当做一个整体来处理时就可以考虑使用组合模式。 组合模式被视为是接口型设计模式是因为它将一组对象组装为一个树状结构。这个树状结构中的每个独立组件都可以用同样的方式来处理——无论它们是复杂的还是原始的。 以计算机操作系统中的文件系统为例。在文件系统
阅读全文
摘要:桥接模式是一种结构型设计模式,通过桥接模式可以将抽象部分和它的实现部分分离。这看着有点儿奇怪,接下来会作详细说明。 桥接模式建议将一个较大的类拆分成两中角色。 抽象角色 - 抽象角色是一个接口。它的子类也被称为修正抽象角色。抽象角色包含一个对实现角色的引用。 实现角色 - 实现角色也是一个接口。实现
阅读全文
摘要:说明 适配器模式是一种结构型设计模式。我们用常用的两种笔记本电脑来说明一下这种设计模式。 我们常用的笔记本无非是这两大类: Macbook Pro Windows Laptop 当前这两类笔记本常见的一个区别大概是USB接口的类型了: Macbook Pro的USB接口现在多为扁圆形的Type-C接
阅读全文
摘要:说明 访客模式是一种行为型设计模式。通过访客模式可以为struct添加方法而不需要对其做任何调整。 来看一个例子,假如我们需要维护一个对如下形状执行操作的库: 方形(Square) 圆形(Circle) 长方形(Rectangle) 以上图形的struct都继承自一个共同的shape接口。公司内有多
阅读全文
摘要:模板方法设计模式是一种行为型设计模式。这种模式通过常用于为某种特定的操作定义一个模板或者算法模型。 以一次性密码(OTP:One Time Password)为例。我们常见的一次性密码有两种:短信密码(SMS OTP)或者邮件密码(Email OTP)。不过不管是短信密码还是邮件密码,它们的处理步骤
阅读全文
摘要:策略模式是一种行为型设计模式。通过策略模式,可以在运行时修改一个对象的行为。 接下来仍然是通过例子来了解策略模式。比如说内存缓存,这是我们在开发中经常使用的东西,大家应该都有一定的了解,接下来就用内存缓存来说明下如何使用策略模式。 向内存里存东西对于GoLang来说算是比较简单的事情,通过Map就可
阅读全文
摘要:状态模式,顾名思义,是一种基于有限状态机制的设计模式。在这种设计模式中,行为是由相应的状态来决定的。接下来我们会用一个售卖机的例子来说明下状态模式。为了便于说明,我们把场景简化一下,假设有一台售卖机只卖一种商品,且只有如下四种状态: 有商品 无商品 商品请求中 已收款 一台售卖机也应该会有多种功能,
阅读全文
摘要:观察者模式是一种行为型设计模式。这种模式允许一个实例(可以称为目标对象)发布各种事件(event)给其他实例(观察者)。这些观察者会对目标对象进行订阅,这样每当目标对象发生变化时,观察者就会收到事件(event)通知。 来看个例子:在电商网站经常会有各种商品脱销,假如有顾客已经在关注这些商品,这些商
阅读全文
摘要:空对象设计模式是一种行为型设计模式,主要用于应对空对象的检查。使用这种设计模式可以避免对空对象进行检查。也就是说,在这种模式下,使用空对象不会造成异常。 空对象模式的组件包括: Entity:接口,定义了子struct需要实现的方法 ConcreteEntity:实现了Entity 的具体struc
阅读全文
摘要:备忘录模式是一种行为型设计模式。这种模式允许我们保存对象在某些关键节点时的必要信息,以便于在适当的时候可以将之恢复到之前的状态。通常它可以用来帮助设计撤销/恢复操作。 下面是备忘录设计模式的主要角色: Originator(发起者):Originator是当前的基础对象,它会将自己的状态保存进备忘录
阅读全文
摘要:中介者模式是一种行为型设计模式。在中介者模式中创建了一个中介对象来负责不同类间的通信。因为这些类不需要直接交互,所以也就能避免它们之间的直接依赖,实现解耦的效果。 中介者模式的一个典型案例是老式小火车站。为保证铁路系统稳定运行,两列火车一般不会直接通信,而是听从车站管理员的调度。这里车站管理员就是一
阅读全文
摘要:迭代器模式是一种行为型模式。在这种模式中,集合结构会提供一个迭代器。通过这个迭代器可以顺序遍历集合中的每个元素而不需要暴露其具体的实现。 下面是迭代器模式的一些具体实现: Iterator 接口: 这个接口会定义一些基础的操作函数,如hasNext()或getNext()等。通过名称就可以看出,这些
阅读全文
摘要:命令模式是一种行为型模式。它建议将请求封装为一个独立的对象。在这个对象里包含请求相关的全部信息,因此可以将其独立执行。 在命令模式中有如下基础组件: Receiver:唯一包含业务逻辑的类,命令对象会将请求传递给它,请求的最终处理者 Command:组装了一个Receiver成员,并绑定实现了Rec
阅读全文
摘要:责任链模式是一种行为型设计模式。在这种模式中,会为请求创建一条由多个Handler组成的链路。每一个进入的请求,都会经过这条链路。这条链路上的Handler可以选择如下操作: 处理请求或跳过处理 决定是否将请求传给这条链路上的下一个Handler 下面是责任链模式的用例图: 关于责任链模式的用途最好
阅读全文
摘要:这次介绍最后一个创建型模式——对象池模式。顾名思义,对象池模式就是预先初始化创建好多个对象,并将之保存在一个池子里。当需要的时候,客户端就可以从池子里申请一个对象使用,使用完以后再将之放回到池子里。池子里的对象在应用运行期间永远不会被破坏或回收。 适用场景: 当需要的对象的创建成本比较高,且该类型的
阅读全文
摘要:原型模式也是一种创建型模式,它可以帮助我们优雅地创建对象的拷贝。在这种设计模式里面,将克隆某个对象的职责交给了要被克隆的这个对象。被克隆的对象需要提供一个clone()方法。通过这个方法可以返回该对象的拷贝。 原型模式的使用场景: 创建新对象的操作比较耗资源(如数据库操作)或代价比较高时。比较起从头
阅读全文