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