工厂方法模式

来源:互联网 发布:windows界面开发库 编辑:程序博客网 时间:2024/05/20 14:20

在玩“极品飞车”游戏时,游戏者可以选择从不同的品牌来选择赛车,那么这个品牌其实也就是工厂,每个工厂生产的赛车都不一样。

UML图

这里写图片描述

Factory Method(工厂模式):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method使一个类的实例化延迟到其子类。
应用场景:由于需求的变化,一个类的子类经常面临着剧烈的变化,但他却拥有比较稳定的接口。使用一种封装机制来“隔离这种易变对象的变化”,工厂方法定义一个用于创建对象的接口,让子类来确定创建哪一个具体类的对象,将对象的实例化延迟。

应用场景:
1. 当一个类不知道它所创建的对象的类的时候;
2. 当一个类希望由它的子类来指定所创建的对象的时候;

和简单工厂模式类似,只是把工厂也抽象化了。简单工厂模式只有一个工厂,工厂方法对每一个产品都有相应的工厂。
好处:当增加一个产品时,只需要增加产品类和相对应的工厂,而不需要修改工厂类

1、工厂方法为共厂类定义了接口,用多态类削弱了工厂类的职能

public interface Factory {    public void createProduct();}

2、首先为所有产品定义一个共同的产品接口:

public interface Product {    abstract public void operation();}

3、让生产的所有产品都必须实现上面的接口

class Washer implements Product{    public void operation() {        // TODO Auto-generated method stub        System.out.println("制造洗衣机");    }}class Fridge implements Product{    public void operation() {        // TODO Auto-generated method stub        System.out.println("制造冰箱");    }}class AirConditioner implements Product{    public void operation() {        // TODO Auto-generated method stub        System.out.println("制造空调");    }}

4、工厂方法的核心部分,也就是具体创建产品对象的具体工厂类

//制造洗衣机的工厂class WasherFactory implements Factory{    public void createProduct() {        //制造洗衣机的        Washer washer = new Washer();        washer.operation();    }}//制造冰箱的工厂class FridgeFactory implements Factory{    public void createProduct() {        //制造冰箱        Fridge fridge = new Fridge();        fridge.operation();    }}//制造空调的工厂class AirConditionerFactory implements Factory{    public void createProduct() {        //制造空调        AirConditioner airConditioner = new AirConditioner();        airConditioner.operation();    }

5、下单时通过不同的工厂生产不同的产品

public static void main(String[] args) {        // TODO Auto-generated method stub        WasherFactory washerFactory = new WasherFactory();        FridgeFactory fridgeFactory = new FridgeFactory();AirConditionerFactory airConditionerFactory = new AirConditionerFactory();        airConditionerFactory.createProduct();        washerFactory.createProduct();        washerFactory.createProduct();        fridgeFactory.createProduct();        airConditionerFactory.createProduct();}

工厂方法和简单工厂的主要区别:
简单工厂是把创建产品的职能都放在一个类里面,而工厂方法则把不同的产品放在实现了工厂接口的不同工厂类里面,这样就算其中一个工厂类出现了问题,其他工厂类也能正常工作,互相不受影响,以后增加新产品,也只需要新增一个实现工厂接口类,就能达到,不用修改已有的代码。
工厂方法也有局限的地方,那就是当面对的产品有复杂的等级结构的时候,例如,例如,工厂除了生产家电外产品还生产手机类产品,这样一来,家电和手机就是两大产品家族了,这两大家族下面包含了数量众多的产品,每个产品又有多个型号,这样就形成了一个复杂的产品树了,如果用工厂方法来设计这个产品家族系统,就必须为每个型号的产品创建一个对应的工厂类,当有数百种或者上千种的时候就必须要有对应的上百成千个工厂类,这就出现了类爆炸。

原创粉丝点击