public class Singleton3 {
private static Singleton3 uniqueSingleton3 = new Singleton3();
private Singleton3() {
}
public static Singleton3 getInstance() {
return uniqueSingleton3;
}
}public class Singleton4 {
private Singleton4() {
}
private static class SingletonFactory{
private static final Singleton4 INSTANCE = new Singleton4();
}
public static Singleton4 getInstance() {
return SingletonFactory.INSTANCE;
}
}
1 首先要有一个产品接口
public intece IProduct {
void method01();
void method02();
}
2 然后要有具体的产品
public class ConcreteProductA implements IProduct {
public void method01() {
System.out.println("ConcreteProductA method01() ...");
}
public void method02() {
System.out.println("ConcreteProductA method02() ...");
}
}public class ConcreteProductB implements IProduct{
public void method01() {
System.out.println("ConcreteProductB method01() ...");
}
public void method02() {
System.out.println("ConcreteProductB method02() ...");
}
}
3 简单工厂
一般都是根据传参来进行实例化,也可以使用命名不同的静态方法,还可以使用反射
public class Factory {
/**
* 反射
* @param clazz
* @param <T>
* @return
*/
public <T extends IProduct> T createProduct(Class<T> clazz){
T product = null;
try {
product = (T) Class.forName(clazz.getName()).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return product;
}
/**
* 使用不同命名的静态方法
* @return
*/
public static IProduct createProductA(){
return new ConcreteProductA();
}
public static IProduct createProductB(){
return new ConcreteProductB();
}
/**
* 根据穿参进行实例化
* @param name
* @return
*/
public static IProduct createProduct(String name){
IProduct product = null;
switch (name){
case "productA":
product = new ConcreteProductA();
break;
case "productB":
product = new ConcreteProductB();
break;
default:product = null;
}
return product;
}
}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-33899-2.html