抽象工厂模式
来源:互联网 发布:广州智选网络 cmo 编辑:程序博客网 时间:2024/05/21 10:15
抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
抽象工厂模式中的有以下的四种角色:
抽象工厂(Abstract Factory)角色:担任这个角色的是工厂方法模式的核心,它是与应用系统商业逻辑无关的。
具体工厂(Concrete Factory)角色:这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的。
抽象产品(Abstract Product)角色:担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。
具体产品(Concrete Product)角色:这个角色用以代表具体的产品。
抽象工厂模式就相当于创建实例对象的new,由于经常要根据类生成实例对象,抽象工厂模式也是用来创建实例对象的,所以在需要新的事例对象时便可以考虑是否使用工厂模式。虽然这样做可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。
举例来说:生产餐具和相应食物的工厂,有两个车间,其中一个车间用以生产餐具,一个车间用以生产相应的食物。
当消费者消费时,只需要向相应的具体工厂请求具体餐具和具体食物便可以使用餐具消费食物。
抽象工厂的接口定义如下所示:
public interface KetchenFactory{
public Food getFood();
public TableWare getTableWare();
}
抽象餐具的接口定义如下所示:
public interface TableWare{
public String getTool();
}
抽象食物的接口定义如下所示:
public interface Food{
public String getEatable();
}
具体工厂AKetchen的定义如下所示:
public class AKetchen implements KetchenFactory{
public Food getFood(){
return new Milk();
}
public TableWare getTableWare(){
return new Spoon();
}
}
具体餐具(spoon)的定义如下所示:
public class Spoon implements TableWare{
public String getTool() {
return "spoon";
}
}
具体食物(milk)的定义如下所示:
public class Milk implements Food{
public String getEatable(){
return "milk";
}
}
客户端的定义如下:
public class Client{
public void eat(KetchenFactory k){
System.out.println("A person eat "+k.getFood().getEatable()
+" with "+k.getTableWare().getTool()+"!");
}
public static void main(String[] args){
Client client= new Client();
KetchenFactory kf = new AKetchen();
client.eat(kf);
kf=new BKetchen();
client.eat(kf);
kf= new CKetchen();
client.eat(kf);
}
}
- 工厂模式 -- 抽象工厂
- 工厂模式-抽象工厂
- 工厂模式-抽象工厂
- 工厂模式/抽象工厂模式
- 工厂模式&&抽象工厂模式
- 工厂模式---抽象工厂模式
- 工厂模式&抽象工厂模式
- 工厂模式,抽象工厂模式
- 【模式】抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 工厂方法,抽象工厂模式
- 2,工厂模式--抽象工厂
- C#工厂模式-抽象工厂
- 工厂模式与抽象工厂
- 抽象工厂设计模式
- 抽象工厂模式
- Foursquare模式(SNS)
- .prada handbags,make you more and more mature
- C#中的远程执行和分布式计算
- js dtree 树控件用法
- 调优 Informix SQL
- 抽象工厂模式
- DNF SF
- 为什么MM喜欢软件开发程序员做老公?
- 买房建房装修之风水知识,多图
- Linux5下jdk的安装与环境变量的设置
- PHP comment
- 为什么设置了DropDownList的AutoPostBack="True"还是不能触发SelectedIndexChanged事件?
- Ant在Eclipse3.5 版本下build.xml中的中文不识别
- Webkit内核浏览器解析Textarea innerHTML问题