- 浏览: 479411 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
gapper:
多谢!!!
软件项目解决方案模板 -
lxyizy521:
感谢你无私的分享,正头疼文档的事情呢。
软件项目解决方案模板 -
flyisland:
不错的资料收集的心得,多谢分享!
如何从小工到专家——Dreyfus模型应用 -
a254124185:
Java编码规范及实践 -
clj2008tom:
LZ好久没更新了,呵呵
graphviz 在redhat as4 下的安装
自己CSDN blog 上回收来的,以后都集中到这里了。
设计模式笔记-抽象工厂模式
摘要:介绍了抽象工厂模式的基本概念,并给出了c#语言编写的程序示例
抽象工厂模式向客户端提供一个接口,使得客户端在不必指定具体类型的情况下,创建多个产品族中的对象。本文采取的仍然是接着以前的那个快餐店的例子。
现在,快餐店经营良好,逐渐发展壮大,为了适合不同地方人的饮食习惯,创建了两大系列(相当于产品族)快餐,北方系列和南方系列。每个系列分别由一个大厨掌勺。
抽象工厂模式对新的产品族支持开闭原则,但对新的产品不支持开闭原则。例如增加新的产品族,如增加美国系列快餐(相当于增加了一个产品族),则只要从每个
产品接口继承一个相应美国系列产品即可,不需要更改已有的代码。但如果增加新产品,比如增加了“馒头”这个产品,则它是不支持开闭原则的,因为你要在厨师
接口中,增加返回“馒头”的方法,这就要修改已存在的接口,而修改了上层接口,继承此接口的具体类也要随之改变。
使用抽象工厂模式的条件:
1 一个系统不应依赖于产品如何被创建,组合和表达的细节。
2 有多个产品族,而系统只消费其中一个族中的产品
3 同属于一个产品族的产品是在一起使用的。
4 系统提供一个产品的库,所有产品都是以同样的接口实现。
看下面的C#实现:
using System; namespace AbstractFactory { /// <summary> /// 抽象工厂模式示例 /// </summary> class AbstractFactory { //定义厨师的抽象工厂 public interface Chef { //这里定义厨师的公共操作 //返回抽象面条 Noodle MakeNoodle(); //返回抽象米饭 Rice MakeRice(); //返回抽象面包 Bread MakeBread(); } //定义北方厨师,实现厨师接口 class NorthChef:Chef { public Noodle MakeNoodle() { Console.WriteLine("\n制作北方面条..."); Noodle noodle=new NorthNoodle(); return noodle; } public Rice MakeRice() { Console.WriteLine("\n制作北方米饭..."); Rice rice=new NorthRice(); return rice; } public Bread MakeBread() { Console.WriteLine("\n正在制作北方面包.."); Bread bread=new NorthBread(); return bread; } } //定义南方厨师,实现厨师接口 class SouthChef:Chef { public Noodle MakeNoodle() { Console.WriteLine("\n正在制作南方面条。。。"); Noodle noodle=new SouthNoodle(); return noodle; } public Rice MakeRice() { Console.WriteLine("\n正在制作南方米饭。。。"); Rice rice=new SouthRice(); return rice; } public Bread MakeBread() { Console.WriteLine("\n正在制作南方面包。。。"); Bread bread=new SouthBread(); return bread; } } //定义面条产品 public interface Noodle { //这里定义面条的公共操作 } class NorthNoodle:Noodle { public NorthNoodle() { Console.WriteLine("\n一碗地道的北方面条产生了"); } } class SouthNoodle:Noodle { public SouthNoodle() { Console.WriteLine("\n一碗地道的南方面条产生了"); } } //定义米饭产品 public interface Rice { //这里定义米饭的公共操作 } class NorthRice:Rice { public NorthRice() { Console.WriteLine("\n一碗地道的北方米饭产生了,真好吃"); } } class SouthRice:Rice { public SouthRice() { Console.WriteLine("\n一碗地道的南方米饭产生了,真难吃"); } } //定义面包 public interface Bread { / /这里可以定义一些面包的公共操作 } class NorthBread:Bread { public NorthBread() { Console.WriteLine("\n一个地道的北方面包产生了"); } } class SouthBread:Bread { public SouthBread() { Console.WriteLine("\n一个地道的南方面包产生了"); } } /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(string[] args) { //针对接口编程,创建对象尽量返回上层接口,避免使用具体类 //下面隐藏了具体的创建各种面条,米饭和面包的过程 Chef northChef=new NorthChef(); northChef.MakeNoodle(); northChef.MakeRice(); northChef.MakeBread(); Chef southChef=new SouthChef(); southChef.MakeBread(); southChef.MakeNoodle(); southChef.MakeRice(); Console.ReadLine(); } } }
发表评论
-
如何在公司中引入新思路——fearless change
2009-09-28 00:21 1377我前面的博客也提到,在一个公司中,引入一个新的想法,获得成功并 ... -
Code Review Patterns
2009-06-23 09:57 1478整理了一下Code Review中 ... -
团队分析与设计(TeamAnalysisDesignPattern)
2009-04-11 14:31 14241)Problem 问题域比较复杂,团队中没有人能 ... -
极限会议模式(ExtremeMeeting)
2009-03-17 13:38 1855名字自己随便取的,如有雷同,纯属巧合。 1. Proble ... -
5W问题分析模式
2009-03-10 08:41 01. Problem 当遇到问题,手足无措时。 2. So ... -
影响分析模式(InfluenceAnalysisPattern)
2009-03-06 23:58 12271. Problem 解决问题,进行决策和面对改变时, ... -
全局目标导向模式(GlobalTargetOrientedPattern)
2009-03-05 23:08 9361. Problem 一个团队在做事情的过 ... -
通讯录模式(AddressListPattern)
2009-03-02 22:10 1494模式是实践的抽象,今天我来总结一下通讯录模式。 1. Pr ... -
导航者模式(NavigatorPattern)
2009-02-28 10:40 01. Problem 人是容易犯错的,而且但线条的。 ... -
Double Dispatch(双分派)
2009-02-04 11:24 2465参考资料: http://en.wikipedia ... -
有人的地方就有江湖
2009-01-30 08:54 2298有人的地方就有 ... -
设计模式快速参考-参观者模式
2008-12-06 07:27 1644参观者模式主要对一组固定结构的对象进行访问,一般和组合模式一起 ... -
设计模式快速参考-模板方法模式
2008-12-06 07:21 1066abstract class TravelTemplate ... -
设计模式快速参考-策略模式
2008-12-06 07:17 1174//密钥对生成接口 interface IKeyPairGen ... -
设计模式快速参考-观察者模式
2008-12-06 07:13 1281//主题,这里是快餐店 class SnackShop{ ... -
设计模式快速参考-命令模式
2008-12-06 07:10 1279interface ICommand{ void e ... -
设计模式快速参考-代理模式
2008-12-06 07:07 1213class FileDownloader( publ ... -
设计模式快速参考-外观模式
2008-12-06 07:03 1049为一组类提供简单的外部接口,使外部调用者不需要和所 ... -
设计模式快速参考-组合模式
2008-12-06 07:00 1048abstract class Hardware{ } cla ... -
设计模式快速参考-适配器模式
2008-12-06 06:49 1243interface Powerable{ 110v ...
相关推荐
设计模式 - 抽象工厂模式
设计模式-抽象工厂模式(讲解及其实现代码)
设计模式-抽象工厂模式javademo java小程序
java常用设计模式-抽象工厂模式
能让你最快上手,最容易理解抽象工厂模式,并能在实际中运用
设计模式--抽象工厂模式实现多数据库连接 设计模式,.net设计模式,抽象工厂
java,设计模式中的一种,抽象工厂设计模式。
PHP实现的抽象工厂模式,大家可以下载来参考学习下。
他是一种模式,计算机软件开发的一种模式,可以兼容多个数据库,以及数据库之间交互
创建型设计模式----抽象工厂模式
java设计模式----抽象工厂模式,简单工厂模式代码 代码内部
c++设计模式-创建型-抽象工厂方法-最简单源码-qt工程
iOS设计模式-抽象工厂 理论:http://blog.csdn.net/z251257144/article/details/7482810
设计模式---抽象工厂模式(Abstract Factory)-UML图 (StarUML)
java设计模式-创建者模式-简单工厂模式。详细的讲解了什么是抽象工厂模式及应用场景和应用场景的代码事例。及各工厂模式的区别。
1.可以确信你从工厂得到的产品彼此是兼容的 2.可以避免具体产品和客户端代码之间的紧密耦合 3.符合单一职责原则 4.符合开闭原则
NULL 博文链接:https://jonathan-chen.iteye.com/blog/2194091
设计模式,抽象工厂 基本要领
自己写的设计模式 抽象工厂模式的Java源码,如果大家喜欢的话,就下载看看