结构型模式是描述如何将类对象结合在一起,形成一个更大的结构,结构模式描述两种不同的东西:类与类的实例。故可以分为类结构模式和对象结构模式。
一、工厂模式 Factory Method(创建型模式)
定义:为创建对象定义一个接口,让子类决定实例化哪个类。工厂方法让一个类的实例化延迟至子类。
工厂模式遵循开放—封闭原则。
二、单例模式 Singleton(创建型模式)
定义:保证一个类中仅有一个实例,并提供一个访问它的全局访问点。
实现单例模式的类没有公有构造方法,有一个公有静态工厂方法和一个静态实例变量。
三、桥接模式 Bridge(结构性模式)
定义 :将抽象部分与它的实现部分分离,使它们都可以独立地变化。
意图 :将抽象与实现解耦。
桥接模式包括4种角色 :抽象(Abstraction)、实现者(Implementor)、细化抽象(Refined Abstraction)、具体实现者(Concrete Implementor)
适合情景:
实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这些多角度分离出来让他们独立变化,减少他们之间的耦合。
Java数据库链接库JDBC使用桥接模式。JDBC连接数据库的时候,在各个数据库之间进行切换,基本不需要动太多的代码,甚至丝毫不动,原因就是JDBC提供了统一接口,每个数据库提供各自的实现,用一个叫做数据库驱动的程序来桥接就行了
四、装饰者模式 Decorator(结构型模式)
定义:动态地给对象添加一些额外的职责。就功能来说,装饰者模式相比生成子类更加灵活。
适合情景:
1、需要动态的、透明的为一个对象添加职责,即不影响其他对象。
2、需要动态的给一个对象添加功能,这些功能可以再动态的撤销。
3、需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变的不现实。
五、适配器(包装器)模式 Adapter(结构型模式)
定义:将一个类的接口转换成客户希望的另一个接口。适配者模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适合情景:
两个成熟的类需要通信,但是接口不同,由于开放—封闭原则,我们不能去修改这两个类的接口,所以就需要一个适配器来完成衔接过程。
六、组合模式 Composite(结构型模式)
定义:将对象组合成树形结构以表示“部分—整体”的层次结构。组合使得用户对单个对象和组合对象的使用具有一致性。
七、外观模式 Facade(结构型模式)
定义:外观模式为子系统中的一组接口提供了一个统一的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
外观模式遵循最少知识原则,也称为迪米特原则。
适合场景:
外观模式中,客户对各个具体的子系统是不了解的,所以对这些子系统进行了封装,对外只提供了用户所明白的单一而简单的接口,用户直接使用这个接口就可以完成操作,而不用去理睬具体的过程,而且子系统的变化不会影响到用户,这样就做到了信息隐蔽。
八、享元模式 Flyweight(结构型模式)
定义:运用共享技术有效的支持大量细粒度的对象。因为它可以通过共享大幅度地减少单个实例的数目,避免了大量非常相似类的开销。
适合场景:
享元模式是一个类别的多个对象共享这个类别的一个对象,而不是各自再实例化各自的对象。这样就达到了节省内存的目的。
九、代理模式 Proxy(结构型模式)
定义:为其他对象提供一种代理以控制对这个对象的访问。