其实很多时候明白意思,但是表达不出来。这篇文章的对与设计模式的摘抄,当明白原理,再回过头来看顿时焕然大悟,每个字都不多余。
创建型模式:
1、单例模式
确保某一类只有一个实例,并且自行实例化并向整个系统提供这个实例。
使用场景
确保某个类有且只有一个对象的场景,避免产生多个对象消耗过多的资源,或者某种类型的对象只应该有且只有一个。例如:创建一个对象消耗过多的资源,如访问io 和 数据库资源。
2、Builder模式
将一个复杂的对象的构建与它的表示分离,使用同样的构建过程可以创建不同的表示。
使用场景
1、相同的方法,不同的执行顺序,产生不同的事件结果。
2、多个部件和零件,都可以装配到一个对象中,但是产生的运行结果又不同。
3、将部件和组装过程分离,使得构建过程和部件可以自由扩展,解耦。
3、原型模式
用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。
使用场景
1、类初始化需要消耗过多的资源,包括数据、硬件等,通过原型拷贝可以避免消耗。
2、通过new产生一个对象需要非常繁琐的数据准备或者访问权限。
3、一个对象需要提供给 其他对象访问,而且各个调用者可能都需要访问或修改其值时,可以考虑使用原型供其他对象使用。保护性拷贝。
注:1.与new相比 并不一定速度快。只是new的成本比较高时,通过clone方法效率会好。2.clone 不会执行构造函数。3.浅拷贝和深拷贝,深拷贝实现clone的时候需要对所有的引用类型也要进行clone().
4、简单工厂模式或静态工厂模式
定义一个用于创建对象的接口,让子类决定实例话哪个类。
使用场景
在任何需要生成复杂对象的地方,都可以使用工厂模式。
5、抽象工厂模式
为创建一组相关或相互依赖的对象提供接口,而不需要指定它门的具体类。
使用场景
一个对象族拥有相同的约束时可以使用抽象工厂模式。
18、代理模式
为其他对象提供一种代理以控制对这个对象的访问,
使用场景
当无法或不想直接访问某个对象或访问某个对象存在困难的时候可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象需要实现相同的接口。
InvocationHandler 动态代理
Binder: