创建型模式
简单工厂模式
参数传入方法,共用一个父类,参数不同返回不同的实例,适用与少量对象的创建
模式结构
factory 负责内部逻辑
product 父类
concreteproduct 实现父类
工厂方法模式
工厂父类负责创建,工厂子类负责生产,产品的实例化由工厂子类完成,由于考虑到系统的可扩展性,需要引入抽象层
模式结构
Product 抽象产品
ConcreteProduct 具体产品
Factory 抽象工厂
ConcreteFactory 具体工厂
模式分析
对简单工厂的进一步抽象和推广
抽象工厂
增加了具体工厂实现抽象工厂
模式结构
- AbstractFactory:抽象工厂
- ConcreteFactory:具体工厂
- AbstractProduct:抽象产品
- Product:具体产品
单例模式
一个类只有一个实体,并提供一个全局的访问点
构造函数私有
实现方式
- 懒汉式线程不安全 :调用时new
- 懒汉式线程安全:调用时加锁
- 饿汉式线程安全:创建时就new
- 双重校验锁:volatile+if(==null){synchronized(class)if(==null)} 双重if判断
- 登记式/静态内部类 :类中声明一个静态类
- 枚举 :反序列化时使用
建造者模式
将一个复杂的构建与表示相分离,使同样的构建过程可以创建不同的表示
模式结构
- Builder:抽象建造者
- ConcreteBuilder:具体建造者
- Director:指挥者
- Product:产品角色
结构型模式
主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的
适配器模式
注意事项
适配器不是在详细设计时添加的,而是解决正在服役的项目的问题。
模式结构
- Target:目标抽象类
- Adapter:适配器类
- Adaptee:适配者类
- Client:客户类
装饰器模式
动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活
装饰模式是继承的一个替代模式,装饰模式可以动态的扩展一个类的功能
模式结构
- Component: 抽象构件
- ConcreteComponent: 具体构件
- Decorator: 抽象装饰类
- ConcreteDecorator: 具体装饰类
代理模式
想在访问一个类时做一些控制,有些类型的代理可能会造成请求的处理速度变慢
按职责来划分,通常有以下使用场景: 1、远程代理。 2、虚拟代理。 3、Copy-on-Write 代理。 4、保护(Protect or Access)代理。 5、Cache代理。 6、防火墙(Firewall)代理。 7、同步化(Synchronization)代理。 8、智能引用(Smart Reference)代理。
模式结构
- Subject: 抽象主题角色
- Proxy: 代理主题角色
- RealSubject: 真实主题角色
外观模式
隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口
java三层开发模型
模式结构
- Facade: 外观角色
- SubSystem:子系统角色
桥接模式
将抽象部分与实现部分分离,使它们都可以独立的变化
模式结构
- Abstraction:抽象类
- RefinedAbstraction:扩充抽象类
- Implementor:实现类接口
- ConcreteImplementor:具体实现类
组合模式
它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦
在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则
享元模式
在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建
模式结构
- Flyweight: 抽象享元类
- ConcreteFlyweight: 具体享元类
- UnsharedConcreteFlyweight: 非共享具体享元类
- FlyweightFactory: 享元工厂类
行为型模式
策略模式
定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换,但所有策略类都需要对外暴露
模式结构
- Context: 环境类
- Strategy: 抽象策略类
- ConcreteStrategy: 具体策略类
模板方法模式
将通用算法抽象出来
观察者模式
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新
模式结构
- Subject: 目标
- ConcreteSubject: 具体目标
- Observer: 观察者
- ConcreteObserver: 具体观察者
迭代器模式
提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示
责任链模式
避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止,拦截的类都实现统一接口
命令模式
将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化
模式结构
- Command: 抽象命令类
- ConcreteCommand: 具体命令类
- Invoker: 调用者
- Receiver: 接收者
- Client:客户类
备忘录模式
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态
状态模式
允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类
模式结构
- Context: 环境类
- State: 抽象状态类
- ConcreteState: 具体状态类
访问者模式
主要将数据结构与数据操作分离
中介者模式
用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互,对象 Colleague 之间的通信封装到一个类中单独处理
模式结构
- Mediator: 抽象中介者
- ConcreteMediator: 具体中介者
- Colleague: 抽象同事类
- ConcreteColleague: 具体同事类
解释器模式
给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子,这种模式被用在 SQL 解析、符号处理引擎等