1 创建型设计模式之抽象工厂模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 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个分支(拓展性保证了,结偶深,维护性差),方便维护可以参考此设计模式

猜你喜欢

转载自blog.csdn.net/xiaofather/article/details/85111841