# 设计模式 **Repository Path**: happy1895/design-pattern ## Basic Information - **Project Name**: 设计模式 - **Description**: 日常学习java设计模式,以及简单实现 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-12-27 - **Last Updated**: 2021-12-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 设计模式 #### 介绍 日常学习java设计模式,以及简单实现 #### 设计模式分类 ##### 创建型模式,共五种: 1. [工厂方法模式](https://gitee.com/IvenXie/design-pattern/tree/master/FactoryMethodPattern) 2. [抽象工厂模式](https://gitee.com/IvenXie/design-pattern/tree/master/FactoryMethodPattern) 3. [单例模式](https://gitee.com/IvenXie/design-pattern/tree/master/SingletonMode) 4. [建造者模式](https://gitee.com/IvenXie/design-pattern/tree/master/BuiderMethodPattern) 5. [原型模式](https://gitee.com/IvenXie/design-pattern/tree/master/PrototypePattern) ##### 结构型模式,共七种: 1. [适配器模式](https://gitee.com/IvenXie/design-pattern/tree/master/AdapterPattern) 2. [装饰器模式](https://gitee.com/IvenXie/design-pattern/tree/master/DecoratorPattern) 3. [代理模式](https://gitee.com/IvenXie/design-pattern/tree/master/ProxyPattern) 备注1:适配器模式,装饰器模式,代理模式: 1、适配器模式是将一个类A装换成另一个类B。类A和类B的接口不同 2、装饰器模式是为一个类A增添新的功能,从而变成类B。类A和类B的接口相同,在构造器中传递对象参数可以动态的添加和撤销新的功能 3、代理模式是为一个类A转换操作类B。类A和类B的接口相同,构造器不传递参数,而是在构造器中直接实力化类对象,代理模式一定是自身持有这个对象,不需要从外部传入,其注重的是隔离限制,让外部不能访问你实际的调用对象 区别: 1、代理模式和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口 2、代理模式和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制 备注2:代理模式,单例模式(待添加) 备注3:代理模式,工厂模式(待添加) 4. [外观模式](https://gitee.com/IvenXie/design-pattern/tree/master/FacadePattern) 5. [桥接模式](https://gitee.com/IvenXie/design-pattern/tree/master/BridgePattern) 6. [组合模式](https://gitee.com/IvenXie/design-pattern/tree/master/CompositePattern) 7. [享元模式](https://gitee.com/IvenXie/design-pattern/tree/master/FlyweightPattern) 备注4:享元模式,工厂模式(待添加) ##### 行为型模式,共十一种: 1. [策略模式](https://gitee.com/IvenXie/design-pattern/tree/master/StrategyPattern) 2. [模板方法模式](https://gitee.com/IvenXie/design-pattern/tree/master/TemplateMethod) 3. [观察者模式](https://gitee.com/IvenXie/design-pattern/tree/master/ObserverPattern) 4. [迭代器模式](https://gitee.com/IvenXie/design-pattern/tree/master/IteratorPattern) 5. [责任链模式](https://gitee.com/IvenXie/design-pattern/tree/master/ChainOfResponsibilityPattern) 6. [命令模式](https://gitee.com/IvenXie/design-pattern/tree/master/CommandPattern) 7. [备忘录模式](https://gitee.com/IvenXie/design-pattern/tree/master/MementoPattern) 8. [状态模式](https://gitee.com/IvenXie/design-pattern/tree/master/StatePattern) 9. [访问者模式](https://gitee.com/IvenXie/design-pattern/tree/master/VisitorPattern) 10. [中介者模式](https://gitee.com/IvenXie/design-pattern/tree/master/MediatorPattern) 11. [解释器模式](https://gitee.com/IvenXie/design-pattern/tree/master/InterpreterPattern) ##### 还有两类:并发型模式和线程池模式。 ![设计模式](doc/clipboard.png "设计模式") #### 归纳设计模式 | 分类 | 设计模式 | 简述 | 一句话归纳 | 目的 | 案例 | | ---- | ---- | ---- | ---- | ---- | ---- | |创建型设计模式(简单来说就是用来创建对象的)|||||| || 工厂模式(Factory Pattern)| 不同条件下创建不同实例 |产品标准化,生产更高效|封装创建细节|| ||单例模式(Singleton Pattern)|保证一个类仅有一个实例,并且提供一个全局访问点|世上只有一个我|保证独一无二|| ||原型模式(Prototype Pattern)|通过拷贝原型创建新的对象|拔一根猴毛,吹出千万个|高效创建对象|| ||建造者模式(Builder Pattern)|用来创建复杂的复合对象|高配中配和低配,想选哪配就哪配|开放个性配置步骤|| |结构型设计模式(关注类和对象的组合)|||||| ||代理模式(Proxy Pattern)|为其他对象提供一种代理以控制对这个对象的访问|没有资源没时间,得找别人来帮忙|增强职责|| ||外观模式(Facade Pattern)|对外提供一个统一的接口用来访问子系统|打开一扇门,通向全世界|统一访问入口|| ||装饰器模式(Decorator Pattern)|为对象添加新功能|他大舅他二舅都是他舅|灵活扩展、同宗同源|| ||享元模式(Flyweight Pattern)|使用对象池来减少重复对象的创建|优化资源配置,减少重复浪费|共享资源池|| ||组合模式(Composite Pattern)|将整体与局部(树形结构)进行递归组合,让客户端能够以一种的方式对其进行处理|人在一起叫团伙,心在一起叫团队|统一整体和个体|| ||适配器模式(Adapter Pattern)|将原来不兼容的两个类融合在一起|万能充电器|兼容转换|| ||桥接模式(Bridge Pattern)|将两个能够独立变化的部分分离开来|约定优于配置|不允许用继承|| |行为型设计模式(关注对象之间的通信)|||||| ||模板模式(Template Pattern)|定义一套流程模板,根据需要实现模板中的操作|流程全部标准化,需要微调请覆盖|逻辑复用|| ||策略模式(Strategy Pattern)|封装不同的算法,算法之间能互相替换|条条大道通罗马,具体哪条你来定|把选择权交给用户|| ||责任链模式(Chain of Responsibility Pattern)|拦截的类都实现统一接口,每个接收者都包含对下一个接收者的引用。将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。|各人自扫门前雪,莫管他们瓦上霜|解耦处理逻辑|| ||迭代器模式(Iterator Pattern)|提供一种方法顺序访问一个聚合对象中的各个元素|流水线上坐一天,每个包裹扫一遍|统一对集合的访问方式|| ||命令模式(Command Pattern)|将请求封装成命令,并记录下来,能够撤销与重做|运筹帷幄之中,决胜千里之外|解耦请求和处理|| ||状态模式(State Pattern)|根据不同的状态做出不同的行为|状态驱动行为,行为决定状态|绑定状态和行为|| ||备忘录模式(Memento Pattern)|保存对象的状态,在需要时进行恢复|失足不成千古恨,想重来时就重来|备份、后悔机制|| ||中介者模式(Mediator Pattern)|将对象之间的通信关联关系封装到一个中介类中单独处理,从而使其耦合松散|联系方式我给你,怎么搞定我不管|统一管理网状资源|| ||解释器模式(Interpreter Pattern)|给定一个语言,定义它的语法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子|我想说”方言“,一切解释权都归我|实现特定语法解析|| ||观察者模式(Observer Pattern)|状态发生改变时通知观察者,一对多的关系|到点就通知我|解耦观察者与被观察者|| ||访问者模式(Visitor Pattern)|稳定数据结构,定义新的操作行为|横看成岭侧成峰,远近高低各不同|解耦数据结构和数据操作|| ||委派模式(Delegate Pattern)|允许对象组合实现与继承相同的代码重用,负责任务的调用和分配|这个需求很简单,怎么实现我不管|只对结果负责||