新闻资讯
什么是 “抽象工厂模式” ?
所谓“工厂模式”,是三种常见设计模式的统称,它们分别是简单工厂模式、工厂方法模式、抽象工厂模式。
这一期,我们来介绍抽象工厂模式
我一直有个疑问:如果业务涉及的子类越来越多,难道每一个子类都要对应一个工厂类吗?
比如,业务中需要创建口罩、防毒面具、防护服这三种产品,而每一种产品有包含高端和低端两类,按照工厂方法模式的解决方案,需要创建的类如下:
如图所示,每一个产品类都对应着一个工厂类,当产品数量很多的时候,工厂类的数量也会越老越多,搞得系统非常复杂。
这时候我们该怎么办呢?
其实这个问题很好解决,如果待创建的产品非常多,我们不需要为每一个产品类配上一个工厂类,而是可以把这些产品进行分组。对于上面的例子,我们可以把产品分为“高端组”和“低端组”,每个组中的不同产品,由同一个工厂类的不同方法创建:
按照这个思路,我们来实现一下代码。为了表述简单,代码中只有口罩和防护服两大类产品,首先看一下产品类的代码,口罩和防护服是两个抽象接口,分别拥有高端和低端两个实现类:
public interface IMask {
void showMask();
}
public class LowEndMask implements IMask {
@Override
public void showMask(){
System.out.println("我的低端口罩");
}
}
public class HighEndMask implements IMask {
@Override
public void showMask() {
System.out.println("我是高端口罩");
}
}
public interface IProtectiveSuit {
void showSuit();
}
public class LowEndProtectiveSuit implements IProtectiveSuit {
@Override
public void showSuit() {
System.out.println("我是低端防护服");
}
}
public class HighEndProtectiveSuit implements IProtectiveSuit {
@Override
public void showSuit() {
System.out.println("我是高端防护服");
}
}
接下来是工厂类,由于产品分成了高端和低端两大组,工厂也相应分成了高端工厂和低端工厂,各自负责组内产品的创建:
public interface IFactory {
//创建口罩
IMask createMask();
//创建防护服
IProtectiveSuit createSuit();
}
public class LowEndFactory implements IFactory {
@Override
public IMask createMask() {
IMask mask = new LowEndMask();
// .....
// LowEndMask的100行初始化代码
return mask;
}
@Override
public IProtectiveSuit createSuit() {
IProtectiveSuit suit = new LowEndProtectiveSuit();
// .....
// LowEndProtectiveSuit的100行初始化代码
return suit;
}
}
public class HighEndFactory implements IFactory {
@Override
public IMask createMask() {
IMask mask = new HighEndMask();
// .....
// HighEndMask的100行初始化代码
return mask;
}
@Override
public IProtectiveSuit createSuit() {
IProtectiveSuit suit = new HighEndProtectiveSuit();
// .....
// HighEndProtectiveSuit的100行初始化代码
return suit;
}
}
最后是客户端代码,通过实例化不同的工厂子类,调用不同的创建方法,可以创建出不同的产品:
public class Test {
public static void main(String[] args) {
IFactory factoryA = new LowEndFactory();
IFactory factoryB = new HighEndFactory();
//创建低端口罩
IMask maskA = factoryA.createMask();
//创建高端口罩
IMask maskB = factoryB.createMask();
//创建低端防护服
IProtectiveSuit suitA = factoryA.createSuit();
//创建高端防护服
IProtectiveSuit suitB = factoryB.createSuit();
maskA.showMask();
maskB.showMask();
suitA.showSuit();
suitB.showSuit();
}
}
像这样把产品类分组,组内不同的产品对应于同一工厂类不同方法的设计模式,就是抽象工厂模式。
本内容属于网络转载,文中涉及图片等内容如有侵权,请联系编辑删除
回复列表