创建型模式
- 单例(Singleton)
- 懒汉
懒人lazy,用时才new,线程不安全,因为有判断。
解决:静态内部类初始化。 - 饿汉
不做判断,类加载就new。
- 懒汉
- 原型(Prototype)
- 浅克隆
实现Cloneable - 深克隆
实现Searializable,注意不能序列化的引用,transient
- 浅克隆
- 工厂(Factory)
- 静态工厂
简单模式,上帝类 - 工厂方法
大工厂套小工厂,跟产品的具体实现类一一对应,以增加子类(子工厂)的方式扩展。所以说针对的是某个具体的工厂。 - 抽象工厂
具体工厂或者说产品有相互耦合的关系,所以是针对一系列(几个子工厂)。
- 静态工厂
- 建造者(Builder)
与抽象工厂相比,多了个Direcotr,就是安排调用哪些方法,这样暴露给外部的就是一个整体。Director可以省略,使得每个方法返回自身而调用时重新组合。
结构型模式
- 代理(Proxy)
- 静态代理
设置为属性,调用方法的前后做些事情,傻瓜式。 - 动态代理
JDK
通过反射,实现InvocationHandler,基于接口
CGLib
通过继承
- 静态代理
- 装饰者(Decorator)Wrapper
类似代理,只是业务相关,实现譬如I/O - 适配器(Adaptor)
通过抽象类(适配器)实现目标接口,继承抽象类 - 外观(facade)
多个子系统(模块),存在共通性,通过外观类暴露给外部,避免直接调用。 - 桥接(Bridge)
多种组件,每个组件又分为不同型号,可以组合成多种产品,在桥接类中抽象,外部只要指定需要的产品即可。 - 组合(Component)
想象树状结构 - 享元(Flyweight)
共享元对象,String,数据库连接池 - -