# designpatterns **Repository Path**: guohaifeng123/designpatterns ## Basic Information - **Project Name**: designpatterns - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-05-14 - **Last Updated**: 2024-06-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 设计模式 ## 简单工厂模式 [简单工厂demo](./src/main/java/com/ghf/dp1) ![简单工厂](./images/Snipaste_2024-05-31_23-17-44.png) ## 策略模式中 [策略模式demo](./src/main/java/com/ghf/dp2/Strategy.txt) ![策略模式](./images/Snipaste_2024-05-31_23-16-26.png) ## 单一职责 > 就一个类而言,应该仅有一个引起它变化的原因 ## 开放-封闭原则 > 对于扩展是开放的(Open for extension),对于更改是封闭的(Closed for modification) ## 依赖倒转原则 > 要针对接口编程,不要对实现编程;高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象 ### 里氏替换原则 > 子类必须可以替换父类(多态),使得继承复用成为了可能 ### 迪米特法则 > 迪米特法则首先强调的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限[J&DP] ,也就是说,一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开 ## 装饰模式(Decorator) > 动态的给一个对象添加一些额外的职责 把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象,因此,当需要执行特殊行为时,客户代码就可以在运行时根据需要有选择地、按顺序地使用装饰功能包装对象了 [装饰模式demo](./src/main/java/com/ghf/dp3) ## 代理模式(Proxy) > 为其他对象提供一种代理以控制对这个对象的访问 ![代理模式结构图](./images/Snipaste_2024-05-31_22-48-06.png "代理模式结构图") [代理模式demo](./src/main/java/com/ghf/dp4) ## 工厂方法模式(Factory Method) > 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 ![工厂方法模式( Factory Method) 结构图](./images/Snipaste_2024-06-01_22-57-11.png "工厂方法模式( Factory Method) 结构图") 工厂方法模式和简单工厂的区别: 1. 简单工厂在工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类;但新增实现类需要修改工厂类的方法,不符合开闭原则 2. 工厂方法将工厂类与分支耦合,新增子类也对应创建一个工厂类,由调用端决定使用哪个工厂实例 ![计算器工厂方法结构图](./images/Snipaste_2024-06-01_23-06-49.png "计算器工厂方法结构图") [工厂方法模式demo](./src/main/java/com/ghf/dp5) ## 原型模式(Prototype) > 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象(别名为克隆模式) ![原型模式结构图](./images/Snipaste_2024-06-04_22-01-43.png "原型模式结构图") 浅克隆&深克隆 1. 浅克隆:复制对象时,包含其他对象的引用,那么复制这些对象的引用。 2. 深克隆:复制对象时,还递归地复制对象中的引用类型成员变量所指向的对象,从而创建一个完全独立的新对象。 [原型模式demo](./src/main/java/com/ghf/dp6) ## 模板方法模式(TemplateMethod) > 定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法是的子类可以不改变一个算法的结构即可重定义改算法的某些特定的步骤 ![模板方法模式](./images/Snipaste_2024-06-05_23-21-45.png "模板方法模式") [模板方法模式demo](./src/main/java/com/ghf/dp7) ## 外观模式(Facade) > 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 ![外观模式](./images/Snipaste_2024-06-21_22-41-37.png "外观模式") [外观模式demo](./src/main/java/com/ghf/dp8) ## 建造者模式(Builder) > 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 ![建造者模式](./images/Snipaste_2024-06-23_22-58-29.png "建造者模式") [建造者模式demo](./src/main/java/com/ghf/dp9)