版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaofather/article/details/85111841
1.深入理解抽象工厂设计模式
1.1 设计模式的理念:高拓展 和 高解耦
1.2 命题:根据实际工厂生产产品到调配的流程实现工厂设计模式
先谈一谈工厂从无到提供产品的流程:
照着上图分析并总结:
1.一种设计下产品有很多分支,需要给产品分类方便管理
1.抽象的产品类:定义产品清单
public interface Inventory {
String getProductName();
}
2.定义实际的产品类,总共定义两个:
public class product implements inventory{
public String getProductName() {
return "产品1";
}
}
public class product2 implements inventory{
public String getProductName() {
return "产品2";
}
}
2.一个完整的公司不可能只有一个部门,多个部门之间产品又不同,之间的供货需要进行约束
3.定义抽象工厂产品接口:
public interface AIFactory {
Inventory getProduct();
}
4.具体的工厂子类,分别为每个具体的产品类创建不同的工厂子类:
public class ProductFactory1 implements AIFactory{
public Inventory getProduct() {
return new Product();
}
}
public class ProductFactory2 implements AIFactory{
public Inventory getProduct() {
return new Product2();
}
}
3.如果是一个集团型的大公司,下面会有很多子公司,故也需要进行分类
5.定义工厂接口
public interface AbstractFactory {
String factoryName();
String factoryInventory();
}
6.定义实际的工厂类
public class Factory_1 implements AbstractFactory{
private String name = "factory_1";
public String factoryName() {
return name;
}
public String factoryInventory(){
AIFactory aif = null;
aif = new ProductFactory1();
Inventory i = aif.getProductName();
String productName = i.getProductName();
aif = new ProductFactory2();
Inventory i2 = aif.getProductName();
String productName2 = i2.getProductName();
return productName + "," + productName2;
}
}
public class Factory_2 implements AbstractFactory{
private String name = "Factory_2";
public String factoryName() {
return name;
}
public String factoryInventory() {
return "厂倒闭了,产品清单已作废!";
}
}
4.商人拿货
public class testMain {
public static void main(String[] args) {
AbstractFactory af = null;
af = new Factory_1();
println(af);
af = new Factory_2();
println(af);
}
private static void println(AbstractFactory a){
System.out.println("厂名:"+ a.factoryName() +",产品清单:"+a.factoryInventory());
}
}
5.结果
输出如下:
厂名:factory_1,产品清单:产品1,产品2
厂名:Factory_2,产品清单:厂倒闭了,产品清单已作废!
2.什么时候需要运用到抽象工厂设计模式?
首先你要深思一个道理,就像解决bug一样,得先出问题才能找到bug然后解决,要运用设计模式就先得有需求,然后考虑适合的设计模式,然后才是运用,而不是有需求就运用
2.1 有个沙雕产品经理,需求是什么不清楚,你做出来才知道什么是不想要的
防范未然性,防止出现功能多分支情况 和 因当前版本觉得不满意一言不合就加需求导致功能复杂化(有些功能是一开始设计就有问题需要重新设计,而不是后来补功能来让功能‘觉得’满意)
2.2 多层维度多分支需求
8个if else下每个if else又有8个分支(拓展性保证了,结偶深,维护性差),方便维护可以参考此设计模式