程序员架构算法设计模式和编程理论Java学习笔记

设计模式(三)——工厂模式

2017-03-22  本文已影响124人  l_sivan

本文属于系列文章《设计模式》,附上文集链接

工厂模式定义

实现

先看一下没用到工厂类的场景,我们需要AProduct和BProduct

//产品类接口
public interface IProduct {
    public void say();
}
// A产品类
public class AProduct implements IProduct {
    @Override
    public void say() {
        System.out.println("我是A产品");
    }
}
//B产品类
public class BProduct implements IProduct {
    @Override
    public void say() {
        System.out.println("我是B产品");
    }
}
//场景类
public class Client {
    public static void main(String[] args) {
        IProduct aProduct = new AProduct();
        aProduct.say();
        IProduct bProduct = new BProduct();
        bProduct.say();
    }
}
结果:
我是A产品
我是B产品

完美运行,但是这个有什么问题呢?试想一下,假设以后改需求,需要在生产产品的时候传入生产批次,怎么传?构造函数或者setter都可以,但是都有一个问题,就是我们在改了产品类的时候,还得改正在使用它的地方,这个耦合其实可以解的,用的就是工厂方法。

// 抽象工厂类
public abstract class AbstractFactory {
    public  abstract <T extends IProduct> T  getProduct(Class<T> clazz) ;
}
// 具体工厂类
public class ConcreteFactory extends AbstractFactory{
    @Override
    public <T extends IProduct> T getProduct(Class<T> clazz) {
        T product = null;
        try {
            product = (T) Class.forName(clazz.getName()).newInstance();
        } catch (Exception e) {
        }
        return product;
    }
}
// 产品类不变
// 场景类
public class Client {
    public static void main(String[] args) {
        ConcreteFactory factory = new ConcreteFactory();
        AProduct aproduct = factory.getProduct(AProduct.class);
        aproduct.say();
        BProduct bProduct = factory.getProduct(BProduct.class);
        bProduct.say();
    }
}
结果:
我是A产品
我是B产品

以上就是工厂模式。

上一篇 下一篇

猜你喜欢

热点阅读