首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 冲浪宝典-> 联络聊天
设计模式笔记-抽象工厂模式-.NET教程,评论及其它
作者:网友供稿 点击:272
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
摘要:介绍了抽象工厂模式的基本概念,并给出了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();
}
}
}




文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·Java Unicode转义字符的小小研究-JSP教程,Java技巧及代码
·实现VB与EXCEL的无缝连接-.NET教程,VB.Net语言
·在ASP.NET里通过URL传递参数得到乱码的解决方法-ASP教程,ASP应用
·实例讲解:Java中的SOAP技术-JSP教程,Java技巧及代码
·Session过期问题-ASP教程,ASP应用
·设计模式笔记-抽象工厂模式-.NET教程,评论及其它
·JSP标准标记库促进了网页的开发-JSP教程,Jsp/Servlet
·在Remoting Server上取得Remoting Client的IP地址-ASP教程,ASP应用
·使用JSP标记库校验用户输入-JSP教程,Jsp/Servlet
·c#中DataGrid的数据新增编辑删除操作代码-.NET教程,数据库应用
最新文章
·xp也能享受vista readyboost闪存加速_windows xp
·c# 3.0新特性系列:隐含类型var_c#教程
·如此做google广告,月赚10万美金不成问题_网赚技巧
·王通:个人博客的赚钱之道_网赚技巧
·这一年来风风雨雨-再访中客宋陈磊_站长访谈
·个人网站的定位推广和赚钱-访中国建站站长_站长访谈
·祥瑞网方文春:从800元到6000万元_站长访谈
·行业类、专业性成功网站给个人站长的启示_站长访谈
·网站推广 新招老招齐用上_站长心得
·widnows vista工具栏添加快速启动tabletpc图标_windows vista
相关主题
西部数码虚拟主机

友情链接
CNNIC 西部数码
万网 自助建站
虚拟主机 asp空间
域名注册 域名
域名申请 主页空间
论坛空间 网站空间
国际域名 虚拟空间
空间租用 DDOS防火墙
成都主机托管 四川主机托管
主机租用 服务器租用
网站目录 自助建站
虚拟主机 网址大全
软件下载
自助链接
虚拟主机资讯 特价虚拟主机
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
发表评论 打印  刷新     关闭