设计模式-工厂模式

一、定义

工厂方法模式是简单工厂的进一步深化,在工厂方法模式中,我们不再提供一个统一的工厂类来创建所有的产品,而是针对不同的产品提供不同的工厂。也就是说每个产品都有一个与之对应的工厂。 定义一个创建产品的接口(工厂接口),让实现这个接口的类来决定实例化那个类,让类的实例化推迟到实现这个接口的子类中。

Product抽象产品类:负责定义产品的共性。

Creator抽象工厂类:负责定义工厂的共性。

ConcreateProcuct:具体的产品实现类。

ConcreateCreator:具体的工厂实现类,负责创建产品。

二、类型

 创建型

三、适用场景

  • 客户端不需要知道它所依赖的产品类是如何创建的。
  • 客户端可以通过指定工厂类的子类来创建对应的对象。

四、优点

  • 客户端只需要知道产品对应的工厂,无需关心其创建细节。
  • 加入新产品只需要实现对应的工厂,符合开闭原则。

五、缺点

 类的个数容易过多,增加了系统的复杂度。

六、类图

 

七、代码实现

 产品接口:

package com.wms.factory;

public interface Fruit {
    void produce();
}

 产品实现类:

package com.wms.factory;

public class Banana implements Fruit {
    public void produce() {
        System.out.println("生产香蕉");
    }
}
package com.wms.factory;

public class Apple implements Fruit {
    public void produce() {
        System.out.println("生产苹果");
    }
}

 工厂接口:

package com.wms.factory;

public interface Factory {
    Fruit getFruit();
}

工厂实现类:

package com.wms.factory;

public class AppleFactory implements Factory {
    public Fruit getFruit() {
        return new Apple();
    }
}
package com.wms.factory;

public class BananaFactory implements Factory {
    public Fruit getFruit() {
        return new Banana();
    }
}

客户端:

package com.wms.factory;

public class TestDesignPattern {
    public static void main(String[] args) {
        Factory appleFactory = new AppleFactory();
        Fruit apple = appleFactory.getFruit();
        apple.produce();
        Factory bananaFactory = new BananaFactory();
        Fruit banana = bananaFactory.getFruit();
        banana.produce();
    }
} 

 八、JDK或开源框架中实现

JDK:

 

posted @ 2018-12-28 22:29  请叫我大表哥  阅读(192)  评论(0编辑  收藏  举报