设计模式
设计模式
参考https://www.cnblogs.com/chenssy/p/3357683.html
你用到的设计模式?
sync.poll--相当于单例模式,重复使用,避免了重复创建对象的开销
context.Context:这个类型使用了观察者模式,允许跨goroutine传递请求范围内的数据和取消信号。
sync.Mutex/sync.RWMutex:这些类型使用了保护者模式,提供了互斥访问共享资源的机制。
sync.Map:这个类型使用了写时拷贝的策略,实现了一个线程安全的map。写时拷贝模式
sync.WaitGroup:这个类型使用了观察者模式,允许一组goroutine等待其他goroutine的完成。
sync.Once:实现了单例模式的一种变体,用于确保某个函数只执行一次。这对于一次性初始化操作很有用。
io.Reader/io.Writer:这些接口使用了装饰器模式,允许组合多个 I/O 操作,如缓存、压缩、加密等。
http.Handler:这个接口使用了适配器模式,允许将不同类型的处理器函数适配成标准的HTTP处理器。
sync.Cond:这个类型使用了观察者模式,允许多个goroutine等待/通知特定条件的变化。
encoding/json:这个包使用了工厂模式,根据输入数据自动选择合适的编码/解码器。
database/sql:这个包使用了外观模式,为不同的数据库驱动提供了统一的API。
flag:这个包使用了建造者模式,允许灵活地定义和解析命令行参数。
net/http/httputil.ReverseProxy:这个类型使用了代理模式,为HTTP反向代理提供了通用的实现。
io.Pipe:这个类型使用了管道模式,在两个goroutine之间提供了一个同步的数据传输通道。
fmt.Fprintf:这个函数使用了模板方法模式,允许自定义格式化输出的过程。
regexp.Regexp:这个类型使用了命令模式,提供了一组操作正则表达式的方法。
reflect.Value:这个类型使用了访问者模式,允许对任意类型的值执行各种反射操作。
除了 sync.Map 之外,写时拷贝模式在其他并发编程场景中也有广泛应用,如 Go 语言中的 sync.RWMutex、sync.Cond
创建型
工厂模式(Factory Pattern)
抽象模式 (Abstract Factory Pattern)
单例模式 (Singleton Pattern)
建造者模式 (Builder Pattern)
原型模式 (Prototype Pattern)
工厂模式
主要特点是需要在工厂类中做判断,从而创造相应的产品,当增加新产品时,需要修改工厂类。使用简单工厂模式,我们只需要知道具体的产品型号就可以创建一个产品。
缺点:工厂类集中了所有产品类的创建逻辑,如果产品量较大,会使得工厂类变的非常臃肿。
抽象模式
抽象工厂模式抽象工厂模式是提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。区别于工厂方法模式的地方,工厂方法模式是创建一个工厂,可以实现多种对象;而抽象工厂模式是提供一个抽象工厂接口,里面定义多种工厂,每个工厂可以生产多种对象。
单例模式
单例模式单例模式能保证一个类仅有一个实例,并提供一个访问它的全局访问接口
建造者模式
建造者模式建造者模式是将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。在程序当中就是将一些不会变的基本组件,通过builder来进行组合,构建复杂对象,实现分离。
原型模式
原型模式是用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。其实就是将对象复制了一份并返还给调用者,对象需继承Cloneable并重写clone方法。原型模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。
结构型
适配器模式 (Adapter Pattern)
装饰器模式 (Decorator Pattern)
桥接模式 (Bridge Pattern)
外观模式 (Facade Pattern)
代理模式 (Proxy Pattern)
过滤器模式 (Filter、Criteria Pattern)
组合模式 (Composite Pattern)
享元模式 (Flyweight Pattern)
适配器模式
适配器模式可以将一个类的接口转换成客户端希望的另一个接口,使得原来由于接口不兼容而不能在一起工作的那些类可以在一起工作。通俗的讲就是当我们已经有了一些类,而这些类不能满足新的需求,此时就可以考虑是否能将现有的类适配成可以满足新需求的类。适配器类需要继承或依赖已有的类,实现想要的目标接口。
缺点:过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构
代理模式
代理模式:为其它对象提供一种代理以控制这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介作用。
优点:
职责清晰。真实的角色只负责实现实际的业务逻辑,不用关心其它非本职责的事务,通过后期的代理完成具体的任务。这样代码会简洁清晰。
代理对象可以在客户端和目标对象之间起到中介的作用,这样就保护了目标对象。
扩展性好。
行为型
责任链模式(Chain of Responsibility Pattern)
观察者模式(Observer Pattern)
模板模式(Template Pattern)
命令模式(Command Pattern)
解释器模式(Interpreter Pattern)
迭代器模式(Iterator Pattern)
中介者模式(Mediator Pattern)
策略模式(Strategy Pattern)
状态模式(State Pattern)
备忘录模式(Memento Pattern)
空对象模式(Null Object Pattern)
选择了IT,必定终身学习