美文网首页
(四)抽象工厂模式

(四)抽象工厂模式

作者: feiry | 来源:发表于2019-07-21 13:21 被阅读0次

工厂方法模式解耦了生产水果的功能职责
当水果店越开越大时,可能会产生额外的需求,例如需要对水果进行精致包装来吸引更多的客户,然而不同的水果其包装材料也不同,可能是纸箱、竹篮、塑料袋等,那么不同包装也需要不同的工厂来生产。
那么现在,我们就有了水果工厂来生产水果,包装工厂来包装水果(都是工厂方法模式实现)

水果工厂和包装工厂
具体调用:
public class AppleFactory implements FruitFactory{
    public Fruit getFruit(){
        return new Apple();
    }
}

public class AppleBagFactory implements BagFactory{
    public Bag getBag(){
        return new AppleBag();
    }
}
//...
public static void pack(){
        //初始化苹果工厂
        fruitFactory = new AppleFactory();//猎取工厂不对应
        Fruit fruit = fruitFactory.getFruit();
        fruit.draw();

        //初始化苹果包装工厂
        bagFactory = new AppleBagFactory();
        Bag bag = bagFactory.getBag();

        bag.pack();

        //....邮寄业务
    }

这就有一个问题,因为获取水果工厂和包装工厂都是人为操作,万一水果工厂和包装工厂拿错了怎么办?例如要包装苹果,拿到了苹果工厂,但是由于人员疏忽,包装工厂拿成了香蕉包装工厂,那么结果就是用香蕉的包装,把苹果包了起来,这是异常现象!

public static void pack(){
        //初始化苹果工厂
        fruitFactory = new AppleFactory();//猎取工厂不对应
        Fruit fruit = fruitFactory.getFruit();
        fruit.draw();

        //初始化苹果包装工厂
        bagFactory = new BananaBagFactory();//由于疏忽,拿成了香蕉包装工厂
        Bag bag = bagFactory.getBag();

        bag.pack();

        //....邮寄业务
    }

那么有没有什么办法可以避免这种情况,让同一种类的产品不要错乱呢

抽象工厂模式

让水果的生产方法和包装的生产方法绑定在一起,其实就是把两种工厂方法抽象到一个接口里面


抽象工厂模式

同一种类的水果工厂,负责该水果所有功能(水果的生产、水果的包装)


水果的抽象工厂
这就是抽象工厂模式的运用

总结

抽象工厂模式是对同一种类的业务进行了封装,避免使用错误

相关文章

网友评论

      本文标题:(四)抽象工厂模式

      本文链接:https://www.haomeiwen.com/subject/knjmlctx.html