美文网首页
工厂设计模式二(工厂方法)

工厂设计模式二(工厂方法)

作者: 新征程Dream | 来源:发表于2020-06-27 15:52 被阅读0次

    上一篇我们讲了工厂设计模式的简单工厂模式。顾名思义,简单的工厂模式满足不了我们复杂的需求。现在有一个场景,工厂老板,现在越做越大,工厂也越来越多。单个冰箱的产品,都有多个牌子的。例如:美的,海尔两大牌子。我现在找老板帮我生产一个海尔冰箱的产品。这个时候,老板就该抓头挠腮了,上阶段简单工厂模式,只能满足我们要生产冰箱这个产品。如果具体的去生产某个牌子的冰箱产品,我们可以在原来的基础上追加,但是会引入一个问题,随着品牌过多,产品种类过多,简单工厂模式变得不那么容易维护。这个时候,我们就需要用到第二种工厂设计模式,工厂方法。
    我们是程序员,所以我们还需要回到代码层面搞这个东西
    首先,我们要有一所有的冰箱产品的基类(冰箱产品接口),其次我们要有一个工厂的基类(工厂的接口),来确保我们的工厂都有统一的行为去生产产品。

    package cn.zl.factoryModel;
    // 冰箱产品
    public interface IceBoxProduct {
    }
    
    package cn.zl.factoryModel;
    // 冰箱工厂
    public interface IceBoxFactory {
        IceBoxProduct getIceBoxProduct();
    }
    

    然后在创建冰箱工厂,有海尔,美的两个工厂。好的工厂,责任分的越明细。

    package cn.zl.factoryModel;
    // 海尔冰箱工厂
    public class HierIceBoxFactory implements IceBoxFactory{
        public IceBoxProduct getIceBoxProduct() {
            return new HierIceBox();
        }
    }
    
    package cn.zl.factoryModel;
    // 美的冰箱工厂
    public class MideaIceBoxFactory implements IceBoxFactory{
        public IceBoxProduct getIceBoxProduct() {
            return new MideaIceBox();
        }
    }
    

    再创建我们对应的产品,海尔空调,美的空调。

    package cn.zl.factoryModel;
    // 海尔冰箱
    public class HierIceBox implements IceBoxProduct {
        HierIceBox() {
            
        }
    }
    
    package cn.zl.factoryModel;
    // 美的冰箱
    public class MideaIceBox  implements IceBoxProduct{
        MideaIceBox(){
            
        }
    }
    

    这个时候,我们的产品布局就完成了。测试一把。带来如下:

    package cn.zl.factoryModel;
    public class Main {
        public static void main(String[] args) {
            // 需要一个海尔冰箱
            IceBoxProduct iceBoxProduct = new HierIceBoxFactory().getIceBoxProduct();
            // 需要一个美的冰箱
            IceBoxProduct iceBoxProduct1 = new MideaIceBoxFactory().getIceBoxProduct();
        }
    }
    

    ps:在实际工作中,我们要根绝业务的复杂程度来选择最好的实设计模式,切记设计过度。

    相关文章

      网友评论

          本文标题:工厂设计模式二(工厂方法)

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