Java设计模式之四:抽象工厂模式

之前的工厂方法模式已经介绍过,如果需要生产的产品种类比较多,那么就需要创建很多的工厂类,例如:

衣服有商务型衣服和运动型衣服,鞋子有商务型鞋子和运动型鞋子,按照之前工厂方法模式的设计思路,应该创建四个工厂才行,这样未必就太麻烦了,这里就来介绍一种另外的创建型模式:抽象工厂模式。

第一步:创建衣服抽象类和鞋子抽象类。

第二步:

创建商务型衣服类 extends 衣服抽象类,运动型衣服类 extends 衣服抽象类。

创建商务型鞋子类 extends 鞋子抽象类,运动型鞋子类 extends 鞋子抽象类。

第三步:创建抽象工厂类

第四步:创建商务型工厂类继承抽象工厂类,创建运动型工厂类继承抽象工厂类 。这里有个问题:按照分类,为什么不是创建衣服工厂类而是创建商务型工厂类呢?

因为这个工厂类是要继承抽象工厂类的,而抽象工厂类的方法是创建衣服和鞋子。如果创建了衣服工厂类继承抽象工厂,总不能让衣服工厂创建鞋子吧。

第五步:测验。

下面是代码:

public abstract class Cloth {
	public String name;
}
public class BusinessCloth extends Cloth{

	public BusinessCloth() {
		// TODO Auto-generated constructor stub
		this.name="商务衣服";
	}
}
public class SportCloth extends Cloth{

	public SportCloth() {
		// TODO Auto-generated constructor stub
		this.name="运动衣服";
	}
}
public abstract class Shoe {
  
	public String name;
}
public class BusinessShoe extends Shoe{

	public BusinessShoe() {
		// TODO Auto-generated constructor stub
		this.name="商务鞋子";
	}
}
public class SportShoe extends Shoe{

	public SportShoe() {
		// TODO Auto-generated constructor stub
		this.name="运动鞋";
	}
}
public abstract class AbstractFactory {

	public abstract Cloth produceCloth();
	public abstract Shoe produceShoe();
}
public class BusinessFactory extends AbstractFactory{

	@Override
	public Cloth produceCloth() {
		return new BusinessCloth();
	}

	@Override
	public Shoe produceShoe() {
		return new BusinessShoe();
	}
}
public class SportFactory extends AbstractFactory{

	@Override
	public Cloth produceCloth() {
		return new SportCloth();
	}

	@Override
	public Shoe produceShoe() {
		return new SportShoe();
	}
}

@Test
public void test() {
AbstractFactory factory=new SportFactory();
Cloth cloth=factory.produceCloth();
System.out.println(cloth.name);
}

优点:
1、抽象工厂模式隔离了具体类的生产,使得客户并不需要知道什么被创建。
2、当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
3、增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。
 
缺点:
  增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对“开闭原则”的支持呈现倾斜性。

PS 衣服和鞋子属于产品树,而运动衣服和运动鞋子被称为产品族。







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值