黑马程序员技术交流社区

标题: Java设计模式小结 [打印本页]

作者: luheqi    时间: 2014-6-28 17:22
标题: Java设计模式小结
本帖最后由 luheqi 于 2014-6-29 00:54 编辑

    设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。在毕向东老师和张孝祥老师的教程里面主要谈到了以下几种设计模式:
工厂方法模式、单例模式、适配器模式、装饰器模式、代理模式、享元模式。


1、工厂方法模式
就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建

2、单例模式
单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:
1)、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。
2)、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。
3)、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。

代码示例:
饱汉式:
  1. public class Singleton {

  2.         // 持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载
  3.         private static Singleton instance = null;

  4.         // 私有构造方法,防止被实例化
  5.         private Singleton() {
  6.         }

  7.         //静态工程方法,创建实例
  8.         public static Singleton getInstance() {
  9.                 if (instance == null) {
  10.                         instance = new Singleton();
  11.                 }
  12.                 return instance;
  13.         }

  14.         // 如果该对象被用于序列化,可以保证对象在序列化前后保持一致
  15.         public Object readResolve() {
  16.                 return instance;
  17.         }
  18. }
复制代码
另外还有一种饿汉式:直接实例化
  1. public class Singleton {

  2. // 持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载
  3. private static Singleton instance = new Sinleton();

  4. // 私有构造方法,防止被实例化
  5. private Singleton() {
  6. }

  7. //静态工程方法,创建实例
  8. public static Singleton getInstance() {

  9. return instance;
  10. }

  11. // 如果该对象被用于序列化,可以保证对象在序列化前后保持一致
  12. public Object readResolve() {
  13. return instance;
  14. }
  15. }
复制代码


饿汉式可以保证线程安全





3、适配器模式


适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。
主要分为三类:类的适配器模式、对象的适配器模式、接口的适配器模式。



4、装饰器模式


装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例
装饰器模式的应用场景:
1)、需要扩展一个类的功能。
2)、动态的为一个对象增加功能,而且还能动态撤销。(继承不能做到这一点,继承的功能是静态的,不能动态增删。)
缺点:产生过多相似的对象,不易排错!

使用场景:将多个对象组合在一起进行操作,常用于表示树形结构中,例如二叉树,数等。


5、代理模式
1)代理的好处:
-----是可以在间接访问对象的同时,要其前或后,添加其它的逻辑代码.
-----对原来逻辑进行添加其它逻辑,最终生成新的逻辑.即:对类的方法添加一些额外的逻辑,生成新的方法逻辑.
2)静态代理:
-----一个原类与一个代理类要一一对应。
------两者都实现共同的接口或继承相同的抽象类;
------只是在代理类中,实例化原类,在原类方法的前后添加新的逻辑。

3)动态代理类
在使用动态代理类时,我们必须实现InvocationHandler接口



6、享元模式


享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用。




作者: 陈鹏83    时间: 2014-6-28 17:54
学习了,确实都是常用的模式




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2