首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载 ┆ 端午节祝福 ┆ 迅雷在线影视
设为首页
加入收藏
联系我们
高级搜索
您当前的位置: 主页>NET专区>其他>实例讲解ASP.NET抽象工厂模式教程
实例讲解ASP.NET抽象工厂模式教程
来源: 发布时间:2008-05-09 发布人: 浏览: 人次   字体: [ ]  
介绍了抽象工厂模式的基本概念,并给出了c#语言编写的程序示例

抽象工厂模式向客户端提供一个接口,使得客户端在不必指定具体类型的情况下,创建多个产品族中的对象。本文采取的仍然是接着以前的那个快餐店的例子。

 

 

现在,快餐店经常良好,逐渐发展壮大,为了适合不同地方人的饮食习惯,创建了两大系列(相当于产品族)快餐,北方系列和南方系列。每个系列分别由一个大厨掌勺。

 

 

抽象工厂模式对新的产品族支持开闭原则,但对新的产品不支持开闭原则。例如增加新的产品族,如增加美国系列快餐(相当于增加了一个产品族),则只要从每个产品接口继承一个相应美国系列产品即可,不需要更改已有的代码。但如果增加新产品,比如增加了“馒头”这个产品,则它是不支持开闭原则的,因为你要在厨师接口中,增加返回“馒头”的方法,这就要修改已存在的接口,而修改了上层接口,继承此接口的具体类也要随之改变。

使用抽象工厂模式的条件:
1 一个系统不应依赖于产品如何被创建,组合和表达的细节。
2 有多个产品族,而系统只消费其中一个族中的产品
3 同属于一个产品族的产品是在一起使用的。
4 系统提供一个产品的库,所有产品都是以同样的接口实现。

看下面的C#实现:namespace ConsoleApplication1
{
    /// <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一碗地道的南方面条产生了");
            }
        }


共2页: 上一页 1 [2] 下一页
相 关 文 章   发布商链接
·怎样开启WinCE中的File Server?
·如何用Silverlight制作scrollbar的步...
·Wine环境下成功运行Bitcomet 1.01下...
·WINE中文字体显示方块的解决方案
·WinCE分析Flash分区原则和块的分配是...
·图解Mobile5.0的环境配置和开发配置...
·WINCE自带的驱动程序被修改后如何编...
·CE6和CE5在Platform Builder的Connec...
·WinCE中关于PBcec.exe工具的使用例子
·WinCE通过两种方法实现Screen Rotati...
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·安装WinCE6.0的开发环境全攻...
·CE6和CE5在Platform Builder...
·WINCE自带的驱动程序被修改后
·图解Mobile5.0的环境配置和开
·WinCE分析Flash分区原则和块...
·WINE中文字体显示方块的解决...
·Wine环境下成功运行Bitcomet ...
·如何用Silverlight制作scroll...
·怎样开启WinCE中的File Serve...
·.Net程序如何脱离.net框架也...
·如何在.NET打包时加入卸载功...
·浅谈asp.net服务器端控件与客
·silverlight是什么?有什么用?
·在WinCE5.0和WinCE6.0中编译...
·WinCE BSP中OAL层中的OEMIoCo...
热 门 文 章
·WINE中文字体显示方块的解决...
·在WinCE5.0和WinCE6.0中编译...
·WinCE下,快速编译驱动及BSP...
·WinCE中telnet,FTP及网络共享...
·WinCE BSP中打印信息的实现介...
·WinCE中RTC驱动开发介绍
·实例详解WinCE中Display驱动...
·Wince开发之创建桌面快捷方式
·wince动态加载图片,数据类型...
·wince中BIB文件的详细介绍
·WinCE环境变量的添加,删除和...
·WinCE BSP中OAL层中的OEMIoCo...
·图解WinCE6.0添加自定义的工...
·安装WinCE6.0的开发环境全攻...
·实例讲解PDA入门开发的过程,...
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .