设计模式自用查阅源码(Java版本)
代码
GOF23
说明:将源码Fork到自己的gitee中,使用Web IDE查看会极度舒适!
介绍
设计模式
《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种。
软件架构
-
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:测试使用原型模式创建对象的效率
- Singleton:单例模式(1)
-
StructuralPattern:结构型模式
- Adapter:适配器模式(6)
- Adaptee:被适配类
- Target:目标接口
- Adapter01:类适配器
- AdapterApp01:客户端,测试类适配器(电脑接口转接适配器案例)
- Adapter02:对象适配器
- AdapterApp02:客户端,测试对象适配器(电脑接口转接适配器案例)
- Proxy:代理模式(7)
- StaticProxy:静态代理
- Singer:抽象角色
- RealSinger:真实角色
- SingerProxy:代理角色
- StaticProxyApp:客户端,测试静态代理(歌手演出案例)
- DynamicProxy:动态代理(JDK自带)
- Singer:抽象角色
- RealSinger:真实角色
- SingerHandler:处理器
- DynamicProxyApp:客户端,测试动态代理(歌手演出案例)
- StaticProxy:静态代理
- 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:客户端,测试享元模式(围棋棋子移动案例)
- Adapter:适配器模式(6)
-
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:客户端,测试备忘录模式(象棋悔棋案例)
- ChainOfResp:责任链模式(13)
运行环境
- jdk-1.7
- Intellij IDEA 2019.3