|
<script language="javascript1.2" src="inc/popmenu.js" type="text/javascript"> </script> <script language="javascript1.2" type="text/javascript"> <!-- linkset[0]=new Array() linkset[0][0]="<div class=/"menuitems/"><a href=/"list.aspx?cid=40/">爱心报道</a></div>" linkset[0][1]="<div class=/"menuitems/"><a href=/"list.aspx?cid=41/">娱乐休闲</a></div>" linkset[0][2]="<div class=/"menuitems/"><a href=/"list.aspx?cid=9/">网络文学</a></div>" linkset[0][3]="<div class=/"menuitems/"><a href=/"list.aspx?cid=39/">主题新闻</a></div>" linkset[0][4]="<div class=/"menuitems/"><a href=/"list.aspx?cid=75/">国防频道</a></div>" linkset[1]=new Array() linkset[1][0]="<div class=/"menuitems/"><a href=/"list.aspx?cid=10/">WebForm</a></div>" linkset[1][1]="<div class=/"menuitems/"><a href=/"list.aspx?cid=11/">WinForm</a></div>" linkset[1][2]="<div class=/"menuitems/"><a href=/"list.aspx?cid=15/">ADO.NET</a></div>" linkset[1][3]="<div class=/"menuitems/"><a href=/"list.aspx?cid=12/">图形图像</a></div>" linkset[1][4]="<div class=/"menuitems/"><a href=/"list.aspx?cid=13/">网络通讯</a></div>" linkset[1][5]="<div class=/"menuitems/"><a href=/"list.aspx?cid=14/">算法相关</a></div>" linkset[1][6]="<div class=/"menuitems/"><a href=/"list.aspx?cid=23/">WebServices</a></div>" linkset[1][7]="<div class=/"menuitems/"><a href=/"list.aspx?cid=16/">第三方控件</a></div>" linkset[1][8]="<div class=/"menuitems/"><a href=/"list.aspx?cid=24/">.NET资料</a></div>" linkset[1][9]="<div class=/"menuitems/"><a href=/"list.aspx?cid=27/">C# 2.0</a></div>" linkset[1][10]="<div class=/"menuitems/"><a href=/"list.aspx?cid=76/">项目源码分析</a></div>" linkset[2]=new Array() linkset[2][0]="<div class=/"menuitems/"><a href=/"list.aspx?cid=17/">Access</a></div>" linkset[2][1]="<div class=/"menuitems/"><a href=/"list.aspx?cid=18/">SQL Server</a></div>" linkset[2][2]="<div class=/"menuitems/"><a href=/"list.aspx?cid=19/">Oracle</a></div>" linkset[2][3]="<div class=/"menuitems/"><a href=/"list.aspx?cid=26/">数据库资料</a></div>" linkset[3]=new Array() linkset[3][0]="<div class=/"menuitems/"><a href=/"list.aspx?cid=37/">JavaScript技术</a></div>" linkset[3][1]="<div class=/"menuitems/"><a href=/"list.aspx?cid=20/">JavaScript资料</a></div>" linkset[4]=new Array() linkset[4][0]="<div class=/"menuitems/"><a href=/"list.aspx?cid=21/">HTML</a></div>" linkset[4][1]="<div class=/"menuitems/"><a href=/"list.aspx?cid=28/">CSS</a></div>" linkset[4][2]="<div class=/"menuitems/"><a href=/"list.aspx?cid=22/">相关资料</a></div>" linkset[5]=new Array() linkset[5][0]="<div class=/"menuitems/"><a href=/"topicnews.aspx?topicid=8/">架构模式开发</a></div>" linkset[5][1]="<div class=/"menuitems/"><a href=/"topicnews.aspx?topicid=7/">WSE应用</a></div>" linkset[5][2]="<div class=/"menuitems/"><a href=/"topicnews.aspx?topicid=6/">XML技术</a></div>" linkset[5][3]="<div class=/"menuitems/"><a href=/"topicnews.aspx?topicid=5/">点对点应用[P2P]</a></div>" linkset[5][4]="<div class=/"menuitems/"><a href=/"topicnews.aspx?topicid=4/">分布式数据库</a></div>" linkset[5][5]="<div class=/"menuitems/"><a href=/"topicnews.aspx?topicid=1/">Asp.net DataGri</a></div>" linkset[5][6]="<div class=/"menuitems/"><a href=/"topicnews.aspx?topicid=3/">.NET多线程</a></div>" linkset[5][7]="<div class=/"menuitems/"><a href=/"topicnews.aspx?topicid=9/">正则表达式</a></div>" linkset[6]=new Array() linkset[6][0]="<div class=/"menuitems/"><a href=/"list.aspx?cid=43/">系统分析</a></div>" linkset[6][1]="<div class=/"menuitems/"><a href=/"list.aspx?cid=44/">软件方法学</a></div>" linkset[6][2]="<div class=/"menuitems/"><a href=/"list.aspx?cid=45/">软件设计技术</a></div>" linkset[6][3]="<div class=/"menuitems/"><a href=/"list.aspx?cid=46/">软件过程体系</a></div>" linkset[6][4]="<div class=/"menuitems/"><a href=/"list.aspx?cid=47/">项目管理</a></div>" linkset[6][5]="<div class=/"menuitems/"><a href=/"list.aspx?cid=48/">软件文档</a></div>" linkset[6][6]="<div class=/"menuitems/"><a href=/"list.aspx?cid=49/">解决方案</a></div>" linkset[6][7]="<div class=/"menuitems/"><a href=/"list.aspx?cid=50/">其它相关</a></div>" linkset[6][8]="<div class=/"menuitems/"><a href=/"list.aspx?cid=74/">资料下载</a></div>" --> </script>首页 另类生活 .NET技术 数据库技术 JavaScript技术 网页设计相关 技术专题 项目体系 网络日志 网站论坛 |
放心去飞 → 项目体系 → 软件方法学 → 设计模式 | |||||
工厂方法(Factory Method)模式
一、 工厂方法(Factory Method)模式工厂方法(FactoryMethod)模式是类的创建模式,其用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。 工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。 在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。这个核心类仅仅负责给出具体工厂必须实现的接口,而不接触哪一个产品类被实例化这种细节。这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。 在Factory Method模式中,工厂类与产品类往往具有平行的等级结构,它们之间一一对应。 二、 Factory Method模式角色与结构:抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。 具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。在上图中有两个这样的角色:BulbCreator与TubeCreator。 抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。在上图中,这个角色是Light。 具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。 三、 程序举例:
using
System;
public abstract class Light { public abstract void TurnOn(); public abstract void TurnOff(); } public class BulbLight : Light { public override void TurnOn() { Console.WriteLine("Bulb Light is Turned on"); } public override void TurnOff() { Console.WriteLine("Bulb Light is Turned off"); } } public class TubeLight : Light { public override void TurnOn() { Console.WriteLine("Tube Light is Turned on"); } public override void TurnOff() { Console.WriteLine("Tube Light is Turned off"); } } public abstract class Creator { public abstract Light factory(); } public class BulbCreator : Creator { public override Light factory() { return new BulbLight(); } } public class TubeCreator : Creator { public override Light factory() { return new TubeLight(); } } public class Client { public static void Main() { Creator c1 = new BulbCreator(); Creator c2 = new TubeCreator(); Light l1 = c1.factory(); Light l2 = c2.factory(); l1.TurnOn(); l1.TurnOff(); Console.WriteLine("-----------------"); l2.TurnOn(); l2.TurnOff(); } } 工厂方法的活动序列图 活动过程包括: 客户端创建BulbCreator对象,客户端持有此对象的类型是Creator,而实际类型是BulbCreator。然后客户端调用BulbCreator的factory方法,之后BulbCreator调用BulbLight的构造函数创造出产品BulbLight对象。
|
| |
【 评论 】 【 推荐 】 【 打印 】 【 字体:大 中 小 】 |
上一篇:抽象工厂(Abstract Factory)模式 下一篇:简单工厂(Simple Factory)模式 |
- 设计模式-简单工厂模式(SimpleFactory... (2004-12-23)
- 设计模式-工厂模式(手工作坊到工业化... (2004-12-23)
- 设计模式笔记-抽象工厂模式 (2004-12-23)
- 设计模式原型模式(Prototype)- 面馆里... (2004-12-23)
- 设计模式-建造模式(一碗牛肉面的制造... (2004-12-23)
Copyright © www.PutFly.com 2004-2005 放心去飞 | ||
闽ICP备05013700号 |