设计模式中结构型模式有8种,分别是享元模式、门面模式、代理模式、设配器模式、桥接模式、过滤器模式、组合模式、装饰器模式
- 享元模式(Flyweight Pattern)
所谓享元模式就是运用
共享
技术有效地支持大量细粒度对象
的复用。系统使用少量对象,而且这些都比较相似,状态变化小,可以实现对象的多次复用。
共享模式是支持大量细粒度对象的复用
,所以享元模式要求能够共享的对象必须是细粒度对象。
在了解享元模式之前我们先要了解两个概念:内部状态
、外部状态
。
内部状态
:在享元对象内部不随外界环境改变而改变的共享部分。
外部状态
:随着环境的改变而改变,不能够共享的状态就是外部状态。
享元模式的核心在于享元工厂类,享元工厂类的作用在于提供一个用于存储享元对象的享元池,用户需要对象时,首先从享元池中获取,如果享元池中不存在,则创建一个新的享元对象返回给用户,并在享元池中保存该新增对象。
注:多线程下如果不加锁是是不安全的
应用:String常量池、数据库连接池、线程池、http连接池等
- 门面模式(Facade Pattern)又称外观模式
外观模式隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。最核心的目的:简化子系统,简化客户使用,屏蔽多个子系统
应用:SLF4J SLF4J其实只是一个门面服务而已,他并不是真正的日志框架,真正的日志的输出相关的实现还是要依赖Log4j、logback等日志框架的。
- 代理模式(Proxy Pattern)
代理模式又叫委托模式,是为某个对象提供一个代理对象,并且由代理对象控制对原对象的访问。代理模式通俗来讲就是我们生活中常见的中介。
静态代理
由程序员创建或特定工具自动生成源代码,再对其进行编译。在程序运行之前,代理类.class文件就已经被创建,代理类和委托类的关系在运行前就确定。
动态代理
动态代理类的源码是在程序运行期间由JVM根据反射等机制动态的生成,所以不存在代理类的字节码文件。代理类和委托类的关系是在程序运行时确定。
应用:Aop 动态代理
- 适配器模式(Adapter Pattern)
- 桥接模式(Bridge Pattern)
- 过滤器模式(Filter、Criteria Pattern)
- 组合模式(Composite Pattern)
- 装饰器模式(Decorator Pattern)