欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

设计模式-抽象工厂模式

程序员文章站 2024-01-20 19:45:04
...

<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);
	}
}