Life with teacher Lemon.

详解工厂模式-工厂方法

2021.01.04 | 共 637 字,阅读需约 2 分钟.

工厂方法模式(Factory Method Pattern),又叫做多态工厂模式(Polymorphic Factory),和简单工厂的区别在于,可以在不用修改工厂类的情况下完成新品的增加,更加符合 开闭原则。工厂父类负责定义创建产品的接口,工厂子类负责生成具体的产品,我们来模拟一下不同文具的生产过程。

首先我们来定义一个产品制造商,产品制造商负责生产产品

/**
 * 产品制造商
 */
public interface Manufacturer {
    /**
     * 生产
     */
    void create();
}

其次我们定义一个产品制造工厂,该工厂类定义了一个具体工厂必须实现的接口

/**
 * 工厂
 */
public interface Factory {
    /**
     * 获取产品制造商
     * @return 制造商
     */
    Manufacturer getManufacturer();
}

接着我们针对不同的文具,定义不同的制造商

/**
 * 产品:笔
 */
public class PenManufacturer implements Manufacturer {
    @Override
    public void create() {
        System.out.println("Product pens.");
    }
}
/**
 * 产品:笔记本
 */
public class NotebookManufacturer implements Manufacturer {
    @Override
    public void create() {
        System.out.println("Product notebooks.");
    }
}

然后我们定义不同的产品生产工厂类

/**
 * 生产笔的工厂
 */
public class PenFactory implements Factory {
    @Override
    public Manufacturer getManufacturer() {
        return new PenManufacturer();
    }
}
/**
 * 生产笔记本的工厂
 */
public class NoteBookFactory implements Factory {
    @Override
    public Manufacturer getManufacturer() {
        return new NotebookManufacturer();
    }
}

最后我们来观看一下文具的成产过程

/**
 * 客户端
 */
public class Client {
    public static void main(String[] args) {
        Factory factory = new PenFactory();
        factory.getManufacturer().create();

        factory = new NoteBookFactory();
        factory.getManufacturer().create();
    }
}

客户生产了两种文具:笔和笔记本,生产笔记本的时候并没有去修改工厂类Factory,而是新增了NotebookFactory子工厂和NotebookManufacturer子生产商,如果要引进橡皮擦的生产,那么只需要新增对应的子类工厂和生产商即可,由此可见,工厂方法模式利用了面向对象的多态性里式替换原则,完成了对象的创建,符合开闭原则。但是,对于新产品的引进,需要成对的增加子类,在一定程度上增加了系统的复杂性。

发表评论
今日诗词