工厂方法模式

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

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();
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值