Golang 设计模式

  Golang设计模式思想

  前言一切设计模式都是灵活应用struct的组合模式,以及go隐形继承接口的特性go中的interface就是一些方法装饰, 而struct并不依赖于接口设计模式类型

  创建模式

  建造者模式(Builder Pattern)

  将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示

  工厂方法模式(Factory Method)

  使一个类的实例化延迟到其子类, 定义一个用于创建对象的接口, 让子类决定将哪一个类实例化

  对象池模式(Object Pool)

  根据需求将预测的对象保存到channel中, 用于对象的生成成本大于维持成本

  单类模式(singleton)

  单例模式是最简单的设计模式之一, 保证一个类仅有一个实例, 并提供一个全局的访问接口

  生成器模式(Generator)

  生成器模式可以允许使用者在生成要使用的下一个值时与生成器并行运行

  抽象工厂模式(Abstract Factory)

  提供一个创建一系列相关或相互依赖对象的接口, 而无需指定它们具体的类

  原型模式(Prototype Pattern)

  复制一个已存在的实例

  结构模式

  装饰模式(Decorator Pattern)

  装饰模式使用对象组合的方式动态改变或增加对象行为, 在原对象的基础上增加功能

  代理模式(Proxy Pattern)

  代理模式用于延迟处理操作或者在进行实际操作前后对真实对象进行其它处理。

  适配器模式(Adapter Pattern)

  将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作

  组合模式(Composite)

  组合模式有助于表达数据结构, 将对象组合成树形结构以表示"部分-整体"的层次结构, 常用于树状的结构

  享元模式(Flyweight Pattern)

  把多个实例对象共同需要的数据,独立出一个享元,从而减少对象数量和节省内存

  外观模式(Facade Pattern)

  外观模式在客户端和现有系统之间加入一个外观对象, 为子系统提供一个统一的接入接口, 类似与委托

  桥接模式(Bridge Pattern)

  桥接模式分离抽象部分和实现部分,使得两部分可以独立扩展

  行为模式

  观察者模式(Observer)

  定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新

  策略模式(Strategy)

  定义一系列算法,让这些算法在运行时可以互换,使得分离算法,符合开闭原则

  状态模式(State Pattern)

  用于系统中复杂对象的状态转换以及不同状态下行为的封装问题

  访问者模式(Visitor Pattern)

  访问者模式是将对象的数据和操作分离

  模板方法模式(Template Method Pattern)

  模版方法使用匿名组合的继承机制, 将通用的方法和属性放在父类中, 具体的实现放在子类中延迟执行

  [备忘录模式(Memento Pattern)][中介模式(Mediator Pattern)]迭代器模式(Iterator Pattern)

  可以配合访问者模式,将不同的数据结构,使用迭代器遍历

  [解释器模式(Interpreter Pattern)][命令模式(Command Pattern)]责任链模式(Chain of Responsibility)

  责任链模式是将处理请求的多个对象连成一条链(类似队列),每个对象都包含下一个对象的引用,请求沿着链传递,直到被处理

  同步模式(synchronization patterns)

  信号量模式(Semaphore)

  信号量是一种同步模式,对有限数量的资源同步互斥

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是几种常见的Golang设计模式: 1. 工厂模式(Factory Pattern):用于创建对象的模式,通过定义一个创建对象的接口来实现对象的实例化。 ```go type Shape interface { Draw() } type Circle struct{} func (c *Circle) Draw() { fmt.Println("Drawing a circle") } type Rectangle struct{} func (r *Rectangle) Draw() { fmt.Println("Drawing a rectangle") } type ShapeFactory struct{} func (sf *ShapeFactory) GetShape(shapeType string) Shape { if shapeType == "circle" { return &Circle{} } else if shapeType == "rectangle" { return &Rectangle{} } return nil } func main() { factory := &ShapeFactory{} circle := factory.GetShape("circle") circle.Draw() // 输出:Drawing a circle rectangle := factory.GetShape("rectangle") rectangle.Draw() // 输出:Drawing a rectangle } ``` 2. 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点。 ```go type Singleton struct{} var instance *Singleton func GetInstance() *Singleton { if instance == nil { instance = &Singleton{} } return instance } func main() { singleton1 := GetInstance() singleton2 := GetInstance() fmt.Println(singleton1 == singleton2) // 输出:true } ``` 3. 观察者模式(Observer Pattern):定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都会得到通知并自动更新。 ```go type Subject struct { observers []Observer } func (s *Subject) Attach(observer Observer) { s.observers = append(s.observers, observer) } func (s *Subject) Notify() { for _, observer := range s.observers { observer.Update() } } type Observer interface { Update() } type ConcreteObserver struct{} func (co *ConcreteObserver) Update() { fmt.Println("Observer is updated") } func main() { subject := &Subject{} observer := &ConcreteObserver{} subject.Attach(observer) subject.Notify() // 输出:Observer is updated } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值