Welcome

首页 / 软件开发 / 数据结构与算法 / 设计模式学习——工厂方法

设计模式学习——工厂方法2016-02-25简介:

上一篇我们介绍了简单工厂,还记得简单工厂的缺点么?忘了回去浏览一下(这里)!因为简单工厂创造了一个万能的上帝工厂类,它把所有的工作都包了。当我们增加一个新的产品的时候,我们仍需要修改工厂中的方法。而工厂方法改进了简单工厂这一缺点,并且保留了原有的优点。怎么做到的,继续看下去!

在工厂方法中,核心的工厂类摇身一变,变为一个抽象的工厂角色,而将具体的工作交给具体的子类去做。这个就是工厂方法对简单工厂的改进。言语表达不清,请看下面的类图。

UML类图:

还是类图比较直观。从类图中,我们看到,原来简单工厂的核心工厂类,变为了抽象工厂和继承它的具体工厂。产品现在都是由具体工厂来生产。每个具体工厂比较专心,生产一个产品,(当然,如果有必要,你可以让一个具体工厂生产多个产品)。实现请看下面的代码。

工厂方法的代码实现:

interface AbstractProduct {}//具体产品1class Product1 implements AbstractProduct {public Product1(){System.out.println("生产具体产品1");}} //具体产品2class Product2 implements AbstractProduct{public Product2(){System.out.println("生产具体产品2");}} //抽象工厂,具体的实现交给实现该接口的具体工厂类去完成,interface AbstractFactory {public AbstractProduct create();}//具体工厂类1,主要生产具体产品1class Factory1 implements AbstractFactory {public AbstractProduct create() {return new Product1();}}//具体工厂类2,主要生产具体产品2class Factory2 implements AbstractFactory {public AbstractProduct create() {return new Product2();}}public class Main {public static void main(String[] args) {AbstractFactory factory = new Factory1();Product1 prodect1 = (Product1)factory.create();//生产了具体产品1factory = new Factory2();Product2 prodect2 = (Product2)factory.create();//生产了具体产品2}}