代理模式
代理对象与目标对象,代理对象是对目标对象的扩展,并会调用目标对象。
不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法。
静态代理 :编译期加入
a.可以做到在不修改目标对象的功能前提下,对目标功能扩展。
b.因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类,类太多,一旦接口增加方法,目标对象与代理对象都要维护。
动态代理 (JDK代理,接口代理):反射,运行时动态加入,目标对象一定要实现接口。
Cglib代理 (子类代理):在内存中构建一个子类对象从而实现对目标对象功能的扩展。
a.需要引入cglib的jar文件,但是Spring的核心包中已经包括了Cglib功能,所以直接引入pring-core-3.2.5.jar即可。
b.代理的类不能为final,否则报错。
c.目标对象的方法如果为final/static,那么就不会被拦截,即不会执行目标对象额外的业务方法。
在Spring的AOP编程中:如果加入容器的目标对象有实现接口,用JDK代理;如果目标对象没有实现接口,用Cglib代理。
桥梁模式
将抽象化与实现化脱耦,使得二者可以独立地变化,将两个角色之间的继承关系改为聚合关系,就是将它们之间的强关联改换成为弱关联,如JDBC桥连。
a.找出变化并封装之
b.优先使用聚合而并不是继承
工厂模式
简单工厂模式 :就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建,提供静态工厂方法,根据参数决定创建出哪种类型的实例,在有限的程度上支持开闭原则,如:
DateFormat、SimpleDateFormat。
工厂方法模式 :工厂类变成抽象工厂,仅负责给出工厂子类必须实现的部分(返回抽象类型),完全支持开闭原则,如: java.util.Collection中的iterator()方法。
抽象工厂模式 :围绕一个超级工厂创建其他工厂,该超级工厂又称为其他工厂的工厂。
单例模式 :
饿汉模式 :类加载时就会创建,构造方法私有(类不能被继承)
懒汉模式
原始模型模式
原始模型模式属于对象的创建模式。
浅复制:浅拷贝会进行引用传递,也就是只是将该成员变量的引用值(内存地址)复制一份给新的对象。
a.通过构造方法实现浅拷贝
b.重写clone()方法进行浅拷贝
深复制:重写clone()方法进行浅拷贝
注:clone()方法
1、Object类虽然有这个方法,但是这个方法是受保护的(被protected修饰),所以我们无法直接使用。
2、使用clone方法的类必须实现Cloneable接口,否则会抛出异常CloneNotSupportedException。对于这两点,我们的解决方法是,在要使用clone方法的类中重写clone()方法,通过super.clone()调用Object类中的原clone方法。
观察者模式
一个对象的行为依赖于另一个对象的状态,或者换一种说法,当被观察对象(目标对象)的状态发生改变时 ,会直接影响到观察对象的行为。
如Zookeeper。
适配器模式
创建一个Adapter将两个类的功能合到一个,分为类适配器模式、对象适配器模式 如JDBC驱动软件。
其他
1.开闭原则规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”。
2.里氏替换原则通俗的来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。
评论