工厂方法模式定义
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
工厂方法模式模板代码
AbstractFactory
public abstract class AbstractFactory
{
public abstract <T extends Product> T createProduct(Class<T> c);
}
Factory
public class Factory extends AbstractFactory
{
@SuppressWarnings ("unchecked")
@Override
public <T extends Product> T createProduct(Class<T> c)
{
Product product = null;
try
{
product = (Product)Class.forName(c.getName()).newInstance();
}
catch (Exception e)
{
System.err.println("It`s not Product");
}
return (T)product;
}
}
Product
public abstract class Product
{
public void method1()
{}
public abstract void method2();
}
Product1
public class product1 extends Product
{
@Override
public void method2()
{
System.out.println("I`m product1");
}
}
Client
public class Client
{
public static void main(String[] args)
{
Factory factory = new Factory();
Product product = factory.createProduct(product1.class);
product.method2();
}
}
工厂方法模式的简化-简单工厂模式
优缺点
简单工厂模式是工厂模式的简化版,去掉了工厂方法模式的抽象类,将createFactory方法静态化,简化了创建product流程,缺点是工厂类的扩展比较困难。
示例代码模板
Factory
public class Factory
{
public static <T extends Product> T createProduct(Class<T> c)
{
Product product = null;
try
{
product = (Product)Class.forName(c.getName()).newInstance();
}
catch (Exception e)
{
System.err.println("It`s not Product");
}
return (T)product;
}
}
Client
public class Client
{
public static void main(String[] args)
{
Product product = Factory.createProduct(product1.class);
product.method2();
}
}
工厂方法模式实现单例
当需要大量的单例类创建,可以使用(日常没遇到过,单例很特殊,一般在一个项目中不会存在太多)
Factory
public class SingletonFactory {
private static Singleton singleton;
static{
try {
Class cl= Class.forName(Singleton.class.getName()); //获得无参构造
Constructor constructor=cl.getDeclaredConstructor(); //设置无参构造是可访问的
constructor.setAccessible(true); //产生一个实例对象
singleton = (Singleton)constructor.newInstance();
} catch (Exception e) {
//异常处理 }
}
public static Singleton getSingleton(){ return singleton; }
}
工厂方法模式实现延迟初始化
// TODO