侧边栏壁纸
  • 累计撰写 307 篇文章
  • 累计阅读 104.3万

设计模式总结

TOTC
2013-08-17 / 1,140 阅读 / 正在检测是否收录...

代理模式

代理对象与目标对象,代理对象是对目标对象的扩展,并会调用目标对象。

不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法。

静态代理 :编译期加入

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.里氏替换原则通俗的来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。

21

评论

博主关闭了所有页面的评论