设计模式之抽象工厂模式

抽象工厂模式(别名:配套)

内容:提供一个创建一系列或相互依赖对象的接口,而不用指定它们具体的类。

结构:

1、抽象产品:可以是一个抽象类或接口,定义的具体产品必须实现的方法。

2、具体产品:实现了抽象产品的具体子类。

3、抽象工厂:一个抽象类或接口,定义了一系列产生产品的抽象方法。

4、具体工厂:重写抽象工厂中的抽象方法,返回具体产品的实例。

UML类图:


优点:

可以为用户创建一系列相关的对象,使用户和创建这些对象的类解耦,用户使用不同的具体工厂就能得到一组相关的对象,能避免用户混用不同系列中的产品,同时也可以随时通过添加具体工厂来为用户提供一组相关的对象。

适用情境:

系统需要为用户提供一系列的相关的对象,但不希望用户通过new运算符来实例化这些对象,或不希望用户知道这些对象的关联关系或具体创建过程,用户只需要知道这些对象有哪些方法即可。

使用实例:

//定义抽象产品Clothes
public abstract class Clothes {
	public abstract String getClothesName(); 
}
//定义抽象产品Trousers
public abstract class Trousers {
	public abstract String getTrousersName();
}
//具体产品-西装
public class WesternStyleClothes extends Clothes {
	private String name;
	
	public WesternStyleClothes(String name){
		this.name = name;
	}
	@Override
	public String getClothesName() {
		// TODO Auto-generated method stub
		return this.name;
	}

}
//具体产品-牛仔装
public class CowboyClothes extends Clothes {
	private String name;
	
	public CowboyClothes(String name){
		this.name = name;
	}
	@Override
	public String getClothesName() {
		// TODO Auto-generated method stub
		return this.name;
	}

}
//定义抽象工厂
public abstract class ClothesFactory {
	public abstract Clothes createClothes();
	public abstract Trousers createTrousers();
}
//具体工厂A
public class AClothesFactory extends ClothesFactory {

	@Override
	public Clothes createClothes() {
		// TODO Auto-generated method stub
		return new WesternStyleClothes("A牌西服");
	}

	@Override
	public Trousers createTrousers() {
		// TODO Auto-generated method stub
		return new WesternStyleTrousers("A牌西裤");
	}

}
//具体工厂B
public class BClothesFactory extends ClothesFactory {

	@Override
	public Clothes createClothes() {
		// TODO Auto-generated method stub
		return new CowboyClothes("B牌牛仔服");
	}

	@Override
	public Trousers createTrousers() {
		// TODO Auto-generated method stub
		return new CowboyTrousers("B牌牛仔裤");
	}

}
public class Test {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Clothes clothes;
		Trousers trousers;
		ClothesFactory clothesFactory = new AClothesFactory();
		clothes  = clothesFactory.createClothes();
		trousers = clothesFactory.createTrousers();
		System.out.println("生产出了"+clothes.getClothesName()+","+trousers.getTrousersName());
		clothesFactory = new BClothesFactory();
		clothes  = clothesFactory.createClothes();
		trousers = clothesFactory.createTrousers();
		System.out.println("生产出了"+clothes.getClothesName()+","+trousers.getTrousersName());
	}
}
由具体工厂控制所产生的系列产品,不至于会出现A工厂产生了B系列的产品,同时也可以通过增减不同的具体工厂来构造不同系列的产品,如定义C工厂来产生A牌服装和B牌裤子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值