# GOF23 **Repository Path**: libengang2021/GOF23 ## Basic Information - **Project Name**: GOF23 - **Description**: 设计模式 - **Primary Language**: Java - **License**: Unlicense - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-11-18 - **Last Updated**: 2021-11-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GOF23 #### 介绍 设计模式   《Design Patterns: Elements of Reusable Object-Oriented Software》(即后述《设计模式》一书),由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著(Addison-Wesley,1995)。这几位作者常被称为"四人组(Gang of Four)"。   设计模式共有三大类:   **创建型模式**:关注对象的创建过程。共5种。   **结构型模式**:关注对象和类的组织。共7种。   **行为型模式**:关注系统中对象之间的相互交互,研究系统在运行时对象之间的相互通信与协作,进一步明确对象的职责。共11种。 #### 软件架构 1. CreationPattern:创造型模式 * Singleton:单例模式(1) * Singleton01:饿汉式 * Singleton02:懒汉式 * Singleton03:双重检查锁 * Singleton04:内部静态类 * Singleton05:枚举式 * Singleton06:以懒汉式为例,解决反射和反序列化破解单例模式漏洞 * SingletonApp01:客户端,测试单例性 * SingletonApp02:以懒汉式为例,测试反射和反序列化破解单例模式 * SingletonApp03:测试并发效率 * Factory:工厂模式 * SimpleFactory:简单工厂模式(2) * FactoryMethod:工厂方法模式 * AbstractFactory:抽象工厂模式(3) * CreateObjectApp:测试一般方法创建对象 * SimpleFactoryApp:客户端,测试简单工厂模式(生产不同品牌手机案例) * FactoryMethodApp:客户端,测试工厂方法模式(生产不同品牌手机案例) * AbstractFactoryApp:客户端,测试抽象工厂模式(生产高低端手机零部件案例) * Builder:构造者模式(4) * MobilePhoneBuilder:构造器 * MobilePhoneDirector:装配器 * BuilderApp:客户端,测试构造者模式(手机零部件制造和装配案例) * Prototype:原型模式(5) * Sheep:浅克隆的原型模式 * Sheep:深克隆的原型模式 * PrototypeApp:客户端,测试浅克隆的原型模式(克隆羊案例) * PrototypeApp02:客户端,测试深克隆的原型模式(克隆羊案例) * PrototypeApp03:客户端,测试反序列化实现深克隆(克隆羊案例) * PrototypeApp04:测试使用原型模式创建对象的效率 2. StructuralPattern:结构型模式 * Adapter:适配器模式(6) * Adaptee:被适配类 * Target:目标接口 * Adapter01:类适配器 * AdapterApp01:客户端,测试类适配器(电脑接口转接适配器案例) * Adapter02:对象适配器 * AdapterApp02:客户端,测试对象适配器(电脑接口转接适配器案例) * Proxy:代理模式(7) * StaticProxy:静态代理 * Singer:抽象角色 * RealSinger:真实角色 * SingerProxy:代理角色 * StaticProxyApp:客户端,测试静态代理(歌手演出案例) * DynamicProxy:动态代理(JDK自带) * Singer:抽象角色 * RealSinger:真实角色 * SingerHandler:处理器 * DynamicProxyApp:客户端,测试动态代理(歌手演出案例) * Bridge:桥接模式(8) * Terminal:终端设备类型继承结构 * Brand:终端设备品牌继承结构 * BridgeApp:客户端,测试桥接模式(终端设备类型和品牌案例) * Terminal02:多重继承结构(与桥接模式对比) * Composite:组合模式(9) * Component:抽象组件、抽象叶子组件和抽象容器组件 * Anti_Virus:具体叶子组件和具体容器组件 * CompositeApp:客户端,测试组合模式(杀毒软件案例) * Decorator:装饰器模式(10) * AbstractCar:抽象角色 * Car:具体角色 * DecoratorCar:装饰角色 * FlyCar、SwimCar:具体装饰角色 * DecoratorApp:客户端,测试装饰器模式(超级汽车案例) * Facade:外观模式(11) * RegisterFacade:门面对象 * FacadeApp:客户端,测试外观模式(公司注册案例) * FlyWeight:享元模式(12) * FlyWeight:抽象享元类 * ConcreteFlyWeight:具体享元类 * UnsharedConcreteFlyWeight:非共享享元类 * FlyWeightFactory:享元工厂 * FlyWeightApp:客户端,测试享元模式(围棋棋子移动案例) 3. BehavioralPattern:行为型模式 * ChainOfResp:责任链模式(13) * LeaveRequest:请求对象 * Leader:抽象处理对象 * ConcreteLeader:具体处理对象(多个) * ChainOfRespApp:客户端,测试责任链模式(请假审批案例) * Iterator:迭代器模式(14) * AbstractIterator:抽象迭代器 * Container:聚合对象和内部迭代器 * IteratorApp:客户端,测试迭代器模式(正向遍历迭代器案例) * Mediator:中介者模式(15) * GeneralManager:中介者 * Department:同事(抽象同事和具体同事) * MediatorApp:客户端,测试中介者模式(总经理协调各部门案例) * Command:命令模式(16) * Receiver:接收者 * Command:命令类(抽象命令和具体命令) * Invoker:调用者 * CommandApp:客户端,测试命令模式(单条命令执行案例) * Interpreter:解释器模式(17) * no code * Visiter:访问者模式(18) * no code * Strategy:策略模式(19) * Strategy:策略(抽象策略和具体策略) * Context:上下文 * NonStrategy:不使用策略模式实现相同功能 * StrategyAPP:客户端,测试策略模式(客户报价案例) * TemplateMethod:模板方法模式(20) * BankTemplateMethod:模板方法类 * TemplateMethodApp:客户端,测试模板方法模式(银行办理业务案例) * State:状态模式(21) * State:状态类(抽象状态和具体状态) * Context:上下文 * StateApp:客户端,测试状态模式(酒店房间状态管理案例) * Observer:观察者模式(22) * Observer:观察者类(抽象观察者和具体观察者) * Subject:目标类(目标父类和目标子类) * ObserverApp:客户端,测试观察者模式(推式广播案例) * jdk:基于jdk类库实现观察者模式 * ConcreteObserverB:具体观察者 * ConcreteSubjectB:目标子类 * ObserverBApp:客户端,测试观察者模式(推式广播案例) * Memento:备忘录模式(23) * Originator:源发器类 * Memento:备忘录类 * CareTaker:负责人类 * MementoApp:客户端,测试备忘录模式(象棋悔棋案例) #### 运行环境 1. jdk-1.7 2. Intellij IDEA 2019.3 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)