# DesignPattern **Repository Path**: sevene-assiduous/DesignPattern ## Basic Information - **Project Name**: DesignPattern - **Description**: 设计模式 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-08-02 - **Last Updated**: 2021-08-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [TOC] 文章顺序按照《大话设计模式》 代码见https://gitee.com/sevene-assiduous/DesignPattern.git #### 简单工厂模式 主要用于类的生成,通过一个工厂生成某一类型的类; 示例: 通过工厂模式实现计算器。 运算工厂通过传入参数创建相对应的算法器,所有算法器继承自算法器超类,需要实现getResult方法。 使用时只需要通过工厂创建相应的算法器即可,调用getResult方法即可。 但是一般只通过无参构造方法。 ![image-20210802170511304](C:\Users\Assiduous\AppData\Roaming\Typora\typora-user-images\image-20210802170511304.png) #### 策略模式 将算法封装起来,使之可以互相替换 示例:通过策略模式实现商品促销策略(正常销售,打折,促销) 相对工厂模式创造不同的类,策略模式则是创建更多的算法。 ![image-20210802175948497](C:\Users\Assiduous\AppData\Roaming\Typora\typora-user-images\image-20210802175948497.png) #### 装饰模式 动态的改变一些类的属性和行为 示例:一杯加奶加糖的咖啡 不用改变基类,只需扩展装饰器即可 (注:多层装饰器顺序有影响) ![image-20210802212002330](C:\Users\Assiduous\AppData\Roaming\Typora\typora-user-images\image-20210802212002330.png) #### 代理模式 通过代理来访问对象实体,可以在代理过程中添加操作 示例:设计日志系统 ![image-20210802213948368](C:\Users\Assiduous\AppData\Roaming\Typora\typora-user-images\image-20210802213948368.png) #### 工厂方法模式 相对于简单工厂而言,工厂方法模式符合开闭原则,在不更改原工厂类的情况下,可以扩展多个工厂。将创建实例的判断转移到了客户端。 示例: 通过工厂模式实现计算器。 ![image-20210803133633873](C:\Users\Assiduous\AppData\Roaming\Typora\typora-user-images\image-20210803133633873.png) #### 原型模式 原型模式和单例模式对应,可以生成多个相同的对象,在java中,通过实现Cloneable接口,并重写clone()方法来实现。通过调用Object中的clone方法,**浅拷贝**一个对象。如果要深拷贝可以自己写 **浅拷贝:**生成一个对象,对象内部的属性如果是基本数据类型以及String,则会复制值,如果为引用数据类型,则会复制引用地址。 **深拷贝:**生成一个完全相同且独立的对象。 ![image-20210803220715040](C:\Users\Assiduous\AppData\Roaming\Typora\typora-user-images\image-20210803220715040.png) #### 模板方法模式 一个给定过程中,对于一些细节过程不确定,可以改变的需求时。登陆验证过程中,过程是先登录再验证,但是登录和验证的方式有很多种,因此可以通过模板方法来实现。 ![image-20210803224927700](C:\Users\Assiduous\AppData\Roaming\Typora\typora-user-images\image-20210803224927700.png) #### 建造者模式 当一个类有多个属性,且其中有多个可选属性时,可以使用建造者模式。并且使用链式法则简化构造过程。 ![image-20210804140510295](C:\Users\Assiduous\AppData\Roaming\Typora\typora-user-images\image-20210804140510295.png) #### 观察者模式 当可观察对象发生变化时及时通知挂在在他上面的观察对象。 示例:鼠标点击操作时,事件栏和画板同时收到通知 ![image-20210804154945817](C:\Users\Assiduous\AppData\Roaming\Typora\typora-user-images\image-20210804154945817.png) #### 状态模式 当一个类中的方法过程,且包含较多的判断时,可以采用状态模式,将判断内的各个方法归为一个类。 示例:页面跳转,可以根据当前路由的状态,跳转到相应页面 ![image-20210804183012781](C:\Users\Assiduous\AppData\Roaming\Typora\typora-user-images\image-20210804183012781.png) #### 适配器模式 在使用一个已经存在的类,但是接口和原来方法不匹配时,可以采用适配器模式。 示例:数据库操作,当NewDataBase的方法和原来DataBase中定义的方法不一致时,可以采用适配器使其一致 ![image-20210804185328063](C:\Users\Assiduous\AppData\Roaming\Typora\typora-user-images\image-20210804185328063.png) #### 备忘录模式 可以存储一个类的当前状态,并且可以回滚到当前状态。 示例:游戏角色的状态回档 ![image-20210804194214205](C:\Users\Assiduous\AppData\Roaming\Typora\typora-user-images\image-20210804194214205.png)