工厂模式

2016-10-24  本文已影响0人  A_Coder

       工厂模式专门负责实例化有大量公共接口的类。工厂模式可以动态地决定将哪一个类实例化,而不必事先知道每次要实例化哪一个类。
工厂模式包含以下几个形态:

/*产品抽象类*/
public abstract class product{
    /*产品类的抽象方法*/
    public abstract void method();
}

public class ConcreteProductA extends Product {
    public void method(){
        System.out.println("我是具体实现的产品A");
    }
}

public class ConcreteProductB extends Product {
    public void method(){
        System.out.println("我是具体实现的产品B");
    }
}

/*抽象工厂类*/
public abstract class Factory {
    /*抽象工厂方法*/
    public abstract Product createProduct();
}

/*具体工厂类*/
public class ConcreteFactory extends Factory{
    public Product createProduct(){
        return new ConcreteProductA();
    }
}

public class client{
    public static void main(String []args){
        Factory factory = new ConcreteFactory();
        Product p = factory.createProduct();
        p.method();
    }
}

       如果生产的产品可能在主结构上并没有什么差异,也可以利用反射的方式更简洁地来生产具体产品对象,此时,需要在工厂方法的参数列表中传入一个Class类来决定是哪一个产品类:

public abstract class Factory{
    /**
     *@param clz 产品对象类类型
     */
    public abstract <T extends Product> T createProduct(Class<T> clz);
}

对于具体的工厂类,则通过反射获取类的实例:

public class ConcreteFactory extends Factory{
    public <T extends Product> T createProduct(Class<T> clz){
        Product p = null;
        try{
            p = Class.forName(clz.getName()).newInstanct();
        }catch(Exception e){
            e.printStackTrace();
        }
        return (T) p;
    }
}

Client类中的实现:

public class Client{
    public static void main(String []args){
        Factory factory = new ConcreteFactory();
        Product p = factory.createProduct(ConcreteProductB.class);
        p.method();
    }
}

       一般在任何需要生成复杂对象的地方,都可以使用抽象工厂方法模式。其降低了对象之间的耦合度,但是,抽象工厂方法模式依赖于抽象的架构,其将实例化的任务交由子类去完成,有非常好的扩展性。


上一篇 下一篇

猜你喜欢

热点阅读