# demo-design-pattern **Repository Path**: zylvcxq/demo-design-pattern ## Basic Information - **Project Name**: demo-design-pattern - **Description**: 设计模式-golang版 笔记整理+示例代码 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-06-21 - **Last Updated**: 2022-12-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 设计模式 ### 介绍 设计模式-golang版 笔记整理+示例代码 ### 思维导图(网上抄的) ![](https://img-blog.csdnimg.cn/20210411112243260.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjExNzkxOA==,size_16,color_FFFFFF,t_70) ### 基础知识 1. 什么是设计模式? 简单来说,**设计模式就是开发人员在开发过程中面临一般性问题时提出的通用解决方案。**是经过长时间的试错而得出的结论,目的是为了**提高代码复用性,保证代码更容易让开发者理解和维护。** 当然,设计模式只是一套通用解决方案,在面对实际的业务场景时还是需要具体形式具体分析,才能够得出最优的解决方案! 2. 设计模式的六大原则是什么? 设计模式的六大原则分别为:**单一原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、开闭原则**。所有的设计模式都是通过六大原则的理论基础而得出的结论;下面分别简单介绍一下每个原则的基本概念。 - 单一原则 **概念:**一个类或者一个方法只负责一项职责,尽量做到类只由一个行为原因引起变化。 **理解:**这个原则还是比较好理解的,就例如入口方法(main.go)仅用来初始化,那就不能在这个地方写业务逻辑;但其实现实在开发业务时会发现很难做到单一原则,所以定义时用了尽量(严谨!) - 里氏替换原则 **概念:**子类可以扩展父类的功能,但是不可以改变原有父类的功能。 **理解:**其实就是多态,方法入参类型写父类,然后在调用的时候不同子类调用同一个方法展示出不同的效果(golang没有类的概念,那就自然没有继承、多态这些用法,只能用switch做一个类似的 ([示例代码](https://gitee.com/zylvcxq/demo-design-pattern/blob/master/example1.go))) - 依赖倒置原则 **概念:**面向接口编程 **理解:**如果用过Java的同学应该对这个会比较熟悉,就是使用接口进行方法声明,然后再由具体的类(结构体)实现接口方法;这样的好处在于降低客户程序与实现细节的耦合度。 - 接口隔离原则 **概念:**客户端不用依赖它不需要的接口。 **理解:**比如一个接口声明了10个方法,而A结构体只需要其中5个,而B结构体需要另外五个,所以可以将接口拆分为更小的接口,来让A、B结构体分别进行实现,降低耦合度。 - 迪米特原则 **概念:**又叫最小知识法则,一个类对于其它类知道的越少越好。 **理解:**其实就是每个对象之间不应该能够直接相互作用,而是通过第三方的来进行联系。 - 开闭原则 **概念:**对软件实体(方法、函数、结构体等)扩展开放,修改关闭。 **理解:**就是当有新业务需求时,能够做到快速简单的扩展的同时,不会因为修改而影响其它业务在线上的正常运行。 ### 示例代码导航 [01 简单工厂模式](https://gitee.com/zylvcxq/demo-design-pattern/blob/master/01_simple_factory.go) [02 工厂方法模式](https://gitee.com/zylvcxq/demo-design-pattern/blob/master/02_factory_method.go) [03 抽象工厂模式](https://gitee.com/zylvcxq/demo-design-pattern/blob/master/03_abstract_factory.go) [04 单例模式](https://gitee.com/zylvcxq/demo-design-pattern/blob/master/04_singleton.go) [05 原型模式](https://gitee.com/zylvcxq/demo-design-pattern/blob/master/05_prototype.go) [06 建造者模式](https://gitee.com/zylvcxq/demo-design-pattern/blob/master/06_builder.go) [07 适配器模式](https://gitee.com/zylvcxq/demo-design-pattern/blob/master/07_adapter.go) [08 组合模式](https://gitee.com/zylvcxq/demo-design-pattern/blob/master/08_combination.go) [09 代理模式](https://gitee.com/zylvcxq/demo-design-pattern/blob/master/09_proxy.go) [10 外观模式](https://gitee.com/zylvcxq/demo-design-pattern/blob/master/10_facade.go) [11 桥接模式](https://gitee.com/zylvcxq/demo-design-pattern/blob/master/11_bridge.go) [12 修饰器模式](https://gitee.com/zylvcxq/demo-design-pattern/blob/master/12_decorator.go) [13 享元模式](https://gitee.com/zylvcxq/demo-design-pattern/blob/master/13_flyweight.go) [14 责任链模式](https://gitee.com/zylvcxq/demo-design-pattern/blob/master/14_responsibility_chain.go) [15 观察者模式](https://gitee.com/zylvcxq/demo-design-pattern/blob/master/15_observer.go) [16 解释器模式](https://gitee.com/zylvcxq/demo-design-pattern/blob/master/16_interpreter.go) [17 状态模式](https://gitee.com/zylvcxq/demo-design-pattern/blob/master/17_state.go) [18 模板模式](https://gitee.com/zylvcxq/demo-design-pattern/blob/master/18_template.go) [19 中介模式](https://gitee.com/zylvcxq/demo-design-pattern/blob/master/19_mediator.go) [20 策略模式](https://gitee.com/zylvcxq/demo-design-pattern/blob/master/20_strategy.go) [21 备忘录模式](https://gitee.com/zylvcxq/demo-design-pattern/blob/master/21_momento.go) [22 命令模式](https://gitee.com/zylvcxq/demo-design-pattern/blob/master/22_command.go) [23 访问者模式](https://gitee.com/zylvcxq/demo-design-pattern/blob/master/23_visitor.go) [24 迭代器模式](https://gitee.com/zylvcxq/demo-design-pattern/blob/master/24_iterator.go)