- 浏览: 91647 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
rihui1hao:
总的来说还是不错的
3、Session的get()/load( ...
hibernate总结 -
Jassicr:
相见恨晚呐
java常用算法分析和实现(一) -
xuhang1128:
这是我看过的最好的讲解jvm内存管理,谢谢lz
JVM内存管理:深入垃圾收集器与内存分配策略 -
zcr789654123:
...
StringUtils api 中文 英文 对照
抽象工厂模式中的有以下的四种角色:
抽象工厂(Abstract Factory)角色:担任这个角色的是工厂方法模式的核心,它是与应用系统商业逻辑无关的。
具体工厂(Concrete Factory)角色:这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的。
抽象产品(Abstract Product)角色:担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。
具体产品(Concrete Product)角色:这个角色用以代表具体的产品。
抽象工厂模式就相当于创建实例对象的new,由于经常要根据类生成实例对象,抽象工厂模式也是用来创建实例对象的,所以在需要新的事例对象时便可以考虑是否使用工厂模式。虽然这样做可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。
举例来说:生产餐具和相应食物的工厂,有两个车间,其中一个车间用以生产餐具,一个车间用以生产相应的食物。
当消费者消费时,只需要向相应的具体工厂请求具体餐具和具体食物便可以使用餐具消费食物。
使用UML图表示以上的描述如下:
图1抽象工厂与具体工厂
图2抽象餐具与具体餐具(生产车间)
图3抽象食物与具体食物
每个具体工厂生产出来的具体产品根据不同工厂的不同各不相同,但是客户使用产品的方法是一致的。比如客户在得到餐具和食物之后,两者的搭配是正确的(使用汤匙喝牛奶,使用刀子切面包)。
在本例子中有3个具体工厂AKetchen, BKetchen, BKetchen,分别生产牛奶和汤匙、面包和刀、肉和叉子。牛奶、面包和肉都实现了食物接口。汤匙、刀和叉子都实现了餐具接口。
抽象工厂的接口定义如下所示;
package abstractFactory;
public interface KetchenFactory{
public Food getFood();
public TableWare getTableWare();
}
抽象餐具的接口定义如下所示:
package abstractFactory;
public interface TableWare{
public String getTool();
}
抽象事物的接口定义如下所示:
package abstractFactory;
public interface Food{
public String getEatable();
}
而具体的实现也非常简单,以AKetchen为例子
具体工厂AKetchen的定义如下所示;
package abstractFactory;
public class AKetchen implements KetchenFactory{
public Food getFood(){
return new Milk();
}
public TableWare getTableWare(){
return new Spoon();
}
}
具体餐具(spoon)的定义如下所示:
package abstractFactory;
public class Spoon implements TableWare{
public String getTool() {
return "spoon";
}
}
具体食物(milk)的定义如下所示:
package abstractFactory;
public class Milk implements Food{
public String getEatable(){
return "milk";
}
}
客户端的定义如下:
package abstractFactory;
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);
}
}
小结:抽象工厂模式特别适合于这样的一种产品结构:产品分为几个系列,在每个系列中,产品的布局都是要同的,在一个系列中某个位置的产品,在另一个系列中一定有一个对应的产品。这样的产品结构是存在的,这几个系列中同一位置的产品可能是互斥的,它们是针对不同客户的解决方案,每个客户都只择其一。
优点:消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。
缺点:当具体产品修改时,相应的工厂类也要做相应的修改。
如果觉得写得好,请一定要支持一下,以给我信心和鼓励把剩下的模式例子写出来。
本文出自 “凌辉” 博客,请务必保留此出处http://tianli.blog.51cto.com/190322/32545
发表评论
-
设计模式-命令模式6(转)
2010-11-14 19:07 6843.7 命令模式的优缺点 ... -
设计模式-命令模式5(转)
2010-11-14 19:03 6443.5 队列请求 所谓队列请求,就是对命令 ... -
设计模式-命令模式4(转)
2010-11-14 18:59 7513.4 宏命令 什么是宏命令呢?简单点说就 ... -
设计模式-命令模式3(转)
2010-11-14 18:56 5173.3 可撤销的操作 可撤销操作的意思就是 ... -
设计模式-命令模式2(转)
2010-11-14 18:52 6993 模式讲解 3.1 认识 ... -
设计模式-命令模式1(转)
2010-11-14 18:48 665命令模式也是开发中常 ... -
设计模式-装饰器模式4(转)
2010-11-14 17:23 801而在每个模块内部呢?就拿大家都熟悉的三层架构来说,也是从 ... -
设计模式-装饰器模式3(转)
2010-11-14 17:10 7223 模式讲解 3.1 认识 ... -
设计模式-装饰器模式2(转)
2010-11-14 17:03 6852 解决方案 2.1 装饰 ... -
设计模式-装饰器模式1(转)
2010-11-14 16:56 680装饰模式(Decorator) 1 场景问题 1.1 ... -
设计模式-单例模式4(转)
2010-11-14 16:17 8563.8 在Java中一种更好的单例实现方式 ... -
设计模式-单例模式3(转)
2010-11-14 16:15 6593.3 延迟加载的思想 ... -
设计模式-单例模式2(转)
2010-11-14 16:11 7273 模式讲解 3.1 认识单例模式 (1)单例模式的功 ... -
设计模式-单例模式1(转)
2010-11-14 16:07 715单例模式(Singleton) 1 场景问题 1 ... -
设计模式-桥接模式4(转)
2010-11-14 15:52 6643.4 广义桥接-Java中无处不桥接 使 ... -
设计模式-桥接模式3(转)
2010-11-14 15:49 8653 模式讲解 3.1 认识桥接模式 (1)什么是桥 ... -
设计模式-桥接模式2(转)
2010-11-14 15:44 6532 解决方案 2.1 桥接 ... -
设计模式-桥接模式1(转)
2010-11-14 15:37 684桥接模式(Bridge) 1 场景问题 1.1 发送 ... -
设计模式-建造者模式(转)
2010-11-14 14:49 816建造者模式 这个是zmo_xu的java设计模式系列 ... -
设计模式-工厂方法(转)
2010-11-14 13:28 761工厂方法模式(Factory Method) 1 场景问题 ...
相关推荐
设计模式--抽象工厂模式实现多数据库连接 设计模式,.net设计模式,抽象工厂
设计模式 - 抽象工厂模式
设计模式-抽象工厂模式(讲解及其实现代码)
设计模式-抽象工厂模式javademo java小程序
创建型设计模式----抽象工厂模式
java常用设计模式-抽象工厂模式
java设计模式----抽象工厂模式,简单工厂模式代码 代码内部
c++设计模式-创建型-抽象工厂方法-最简单源码-qt工程
iOS设计模式-抽象工厂 理论:http://blog.csdn.net/z251257144/article/details/7482810
设计模式---抽象工厂模式(Abstract Factory)-UML图 (StarUML)
java设计模式-创建者模式-简单工厂模式。详细的讲解了什么是抽象工厂模式及应用场景和应用场景的代码事例。及各工厂模式的区别。
java,设计模式中的一种,抽象工厂设计模式。
设计模式,抽象工厂 基本要领
能让你最快上手,最容易理解抽象工厂模式,并能在实际中运用
PHP实现的抽象工厂模式,大家可以下载来参考学习下。
自己写的设计模式 抽象工厂模式的Java源码,如果大家喜欢的话,就下载看看
Java设计模式,抽象工厂的Demo,具体的思想与实现有很多讲得很好的老师,我是看厉风行老师的视频学的,讲得不错,简单易懂
他是一种模式,计算机软件开发的一种模式,可以兼容多个数据库,以及数据库之间交互
设计模式举例 抽象工厂模式 代码+用例图 设计模式, 设计模式举例-抽象工厂模式(有图有真相)
设计模式专题之(三)抽象工厂模式---设计模式抽象工厂模式示例代码(python--c++)