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

2020-06-27  本文已影响0人  新征程Dream

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

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:在实际工作中,我们要根绝业务的复杂程度来选择最好的实设计模式,切记设计过度。

上一篇下一篇

猜你喜欢

热点阅读