创建型
单例模式
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