设计模式-创建型总结实例(一)

2014-11-24 07:14:46 · 作者: · 浏览: 4

创建型

单例模式

Singleton,单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点

java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。

  单例模式有一下特点:

  1、单例类只能有一个实例。

  2、单例类必须自己自己创建自己的唯一实例。

  3、单例类必须给所有其他对象提供这一实例。

单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。

实例一:懒汉式


package com.ruishenh.designPatter.creational.singleton;
 
/**
 * 懒汉式,在第一次调用的时候实例化
 * @author hcr
 *
 */
public class LazySingleton {
 
   private static LazySingleton uniqueInstance = null;
 
   /**
    * 私有的构造函数
    */
   private LazySingleton() {
      // Exists only to defeat instantiation.
   }
 
   /**
    * 公有的访问模式
    *
    * @return
    */
   public synchronized static LazySingleton getInstance() {
      // 对象保持一个
      if (uniqueInstance == null) {
        uniqueInstance = new LazySingleton();
      }
      return uniqueInstance;
   }
 
}

实例二:饿汉式


package com.ruishenh.designPatter.creational.singleton;
 
/**
 * 饿汉式单例类.在类初始化时,已经自行实例化
 *
 * @author hcr
 *
 */
public class SampleSingleton {
   /**
    * 私有的构造
    */
   private SampleSingleton() {
   }
 
   /**
    * 初始化对象有实例
    */
   private static final SampleSingleton single = new SampleSingleton();
 
   /**
    * 静态工厂方法直接返回单例对象
    */
   public static SampleSingleton getInstance() {
      return single;
   }
}

实例三:登记式

package com.ruishenh.designPatter.creational.singleton;
 
import java.util.HashMap;
import java.util.Map;
 
/**
 * 登记式单例类. 类似Spring里面的方法,将类名注册,下次从里面直接获取。
 *
 * @author hcr
 *
 */
public class RegisterSingleton {
         /**
          * 默认容器
          */
         private static Map
  
    map = new HashMap
   
    (); static { RegisterSingleton single = new RegisterSingleton(); map.put(single.getClass().getName(), single); } /** * 保护的默认构造器 */ protected RegisterSingleton() { } /** * 静态工厂方法,返还此类惟一的实例 * * @param name * @return */ public static RegisterSingleton getInstance(String name) { if (name == null) { name = RegisterSingleton.class.getName(); System.out.println("name == null"+"--->name="+name); } if (map.get(name) == null) { try { map.put(name, (RegisterSingleton) Class.forName(name) .newInstance()); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } return map.get(name); } public String about() { return "Hello, I am RegSingleton."; } public static void main(String[] args) { RegisterSingleton single = RegisterSingleton.getInstance("com.ruishenh.designPatter.creational.singleton.RegisterSingleton"); System.out.println(single.about()); } }
   
  



参考:http://www.cnblogs.com/whgw/archive/2011/10/05/2199535.html

工厂模式

工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的.

简单工厂

简单工厂模式又叫静态工厂模式,顾名思义,它是用来实例化目标类的静态类。

package com.ruishenh.designPatter.creational.factory.simpleFactory;
 
/**
 * 静态工厂
 * @author hcr
 *
 */
public class SimpleFactory {
   //静态直接产生指定对象
   static TVFactory getTV(){
      return new Haier();
   }
   public static void main(String[] args) {
      //客户端调用静态直接生成创建对象
      TVFactory tv=SimpleFactory.getTV();
      System.out.println(tv.about());
   }
}
interface TVFactory{
   String about();
}
class Haier implements TVFactory{
   @Override
   public String about() {
      return "Haier高清彩电";
   }
}
class Hisense implements TVFactory{
   @Override
   public String about() {
      return "Hisense高清彩电";
   }
  
}




简单工厂核心任务就是简单的返回对应的生产的产品,客户端不用去管怎么创建的,直接调用对应的工厂静态方法返回实体即可。

工厂方法

工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类。


pac