国全译
原文(英文)链接:http://tmrts.com/go-patterns
一、设计模式介绍
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
二、golang设计模式
1. 创建模式(Creational Patterns)
名字 | 描述 | |
抽象工厂模式(Abstract Factory) | 提供用于创建相关对象族的接口或抽象方法。 | |
建造者模式(Builder) | 使用简单对象构建复杂对象 | |
工厂模式(Factory Method) | 将对象的实例化推迟到用于创建实例的专用函数 | |
对象池模式(Object Pool) | 实例化并维护一组相同类型的对象实例 | |
单例模式(Singleton) | 将类型的实例化限制为只能实例一个对象 |
|
2. 结构模式(Structural Patterns)
名字 | 描述 | |
桥接模式(Bridge) | 将接口与其实现分离,以便两者可以独立变化 | |
组合模式(Composite) | 封装并提供对许多不同对象的访问 | |
装饰器模式(Decorator) | 静态或动态地将行为添加到对 | |
外观模式(Facade) | 将一种类型用作其他多种类型的API | |
享元模式(Flyweight) | 重用状态相似或相同的对象的现有实例,以最大程度地减少资源使用 | |
代理模式(Proxy) | 提供对象的替代品以控制其动作 | |
3. 行为模式(Behavioral Patterns)
名字 | 描述 | |
责任链模式(Chain of Responsibility) | 通过给对象提供更多的机会来处理请求,从而避免将发送者耦合到接收者 | |
命令模式(Command) | 捆绑命令和参数以供以后调用 | |
中介者模式(Mediator) | 连接对象并充当代理 | |
备忘录模式(Memento) | 生成不透明的令牌,该令牌可用于返回到先前的状态 | |
观察者模式(Observer) | 提供回调以通知事件或数据更改 | |
注册模式(Registry) | 跟踪给定类的所有子类 | |
状态模式(State) | 根据其内部状态封装不同对象的行为 | |
策略模式(Strategy) | 允许在运行时选择算法的行为 | |
模版模式(Strategy) | 定义一个骨架类,该骨架类将某些方法推迟到子类 | |
访问者模式(Visitor) | 将算法与对其进行操作的对象分开 | |
4. 同步模式( Synchronization Patterns)
名字 | 描述 | |
条件变量(Condition Variable) | 提供一种机制,线程可以暂时放弃访问以等待某种条件 | |
互斥锁(Lock/Mutex) | 对资源强制实施互斥限制以获取互斥访问 | |
监视器(Monitor) | 互斥量和条件变量模式的组合 | |
读写锁(Read-Write Lock) | 允许并行读取访问,但仅对资源的写入操作具有独占访问权限 | |
信号量(Semaphore) | 允许控制对公共资源的访问 | |
5. 并发模式(Concurrency Patterns)
名字 | 描述 | |
N-二道闸(N-Barrier) | 阻止进程在所有N个进程到达障碍之前进行 | |
受限并行(Bounded Parallelism) | 在资源有限的情况下完成大量独立任务 | |
广播(Broadcast) | 同时将消息传送给所有收件人 | |
协程(Coroutines) | 允许在某些位置挂起和恢复执行的子例程 | |
生成器(Generators) | 一次产生一个值序列 | |
反应器(Reactor) | 解复用同时传递给服务处理程序的服务请求,并同步地将它们分派给关联的请求处理程序 | |
并行(Parallelism) | 完成大量独立任务 | |
生产者消费者(Producer Consumer) | 将任务与任务执行分离 | |
6. 消息传递模式(Messaging Patterns)
名字 | 描述 | |
扇入(Fan-In) | 将任务集中到工作接收器(例如服务器) | |
扇出(Fan-Out) | 在workers(例如生产者)之间分配任务 | |
Futures & Promises | 充当结果的占位符,该结果最初出于同步目的是未知的 | |
发布/订阅(Publish/Subscribe) | 将信息传递给订阅主题的收件人的集合 | |
推/拉(Push & Pull) | 将消息分发给安排在管道中的多个工作人员 | |
7. 稳定模式(Stability Patterns)
名字 | 描述 | |
隔板模式(Bulkheads) | 实施故障遏制原则(即防止级联故障) | |
断路器模式(Circuit-Breaker) | 当请求可能失败时,停止请求流 | |
期限模式(Deadline) | 一旦响应的可能性变低(例如,在等待10秒钟的页面刷新之后),客户端就可以停止等待响应 | |
快速失败模式(Fail-Fast) | 在请求开始时检查所需资源的可用性,如果不满足要求,则失败 | |
握手模式(Handshaking) | 询问组件是否可以承受更多的负载,如果不能承受,则请求被拒绝 | |
稳定状态模式(Steady-State) | 对于每个积累资源的服务,其他一些服务必须回收该资源 | |
8. 剖析模式(Profiling Patterns)
名字 | 描述 | |
计时功能(Timing Functions) | 包装函数并记录执行 | |
9. 成例(Idioms)
名字 | 描述 | |
功能选项(Functional Options) | 允许使用默认设置和惯用替代创建干净的API | |
10. 反模式(Anti-Patterns)
名字 | 描述 | |
级联故障(Cascading Failures) | 互连零件系统中的故障,其中零件的故障会导致多米诺骨牌效应 | |