|
<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技术 网页设计相关 技术专题 项目体系 网络日志 网站论坛 |
放心去飞 → 项目体系 → 软件方法学 → 设计模式 |
一、 抽象工厂(Abstract Factory)模式抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。 为了方便引进抽象工厂模式,引进一个新概念:产品族(Product Family)。所谓产品族,是指位于不同产品等级结构,功能相关联的产品组成的家族。如图: 图中一共有四个产品族,分布于三个不同的产品等级结构中。只要指明一个产品所处的产品族以及它所属的等级结构,就可以唯一的确定这个产品。 引进抽象工厂模式 所谓的抽象工厂是指一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族中的所有对象。如果用图来描述的话,如下图: 二、 Abstract Factory模式的结构:
具体工厂(Concrete Factory)角色:这个角色直接在客户端的调用下创建产品的实例。这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统的商业逻辑紧密相关的。 抽象产品(Abstract Product)角色:担任这个角色的类是工厂方法模式所创建的对象的父类,或它们共同拥有的接口。 具体产品(Concrete Product)角色:抽象工厂模式所创建的任何产品对象都是某一个具体产品类的实例。这是客户端最终需要的东西,其内部一定充满了应用系统的商业逻辑。 三、 程序举例:该程序演示了抽象工厂的结构,本身不具有任何实际价值。
//
Abstract Factory pattern -- Structural example
using System; // "AbstractFactory" abstract class AbstractFactory { // Methods abstract public AbstractProductA CreateProductA(); abstract public AbstractProductB CreateProductB(); } // "ConcreteFactory1" class ConcreteFactory1 : AbstractFactory { // Methods override public AbstractProductA CreateProductA() { return new ProductA1(); } override public AbstractProductB CreateProductB() { return new ProductB1(); } } // "ConcreteFactory2" class ConcreteFactory2 : AbstractFactory { // Methods override public AbstractProductA CreateProductA() { return new ProductA2(); } override public AbstractProductB CreateProductB() { return new ProductB2(); } } // "AbstractProductA" abstract class AbstractProductA { } // "AbstractProductB" abstract class AbstractProductB { // Methods abstract public void Interact( AbstractProductA a ); } // "ProductA1" class ProductA1 : AbstractProductA { } // "ProductB1" class ProductB1 : AbstractProductB { // Methods override public void Interact( AbstractProductA a ) { Console.WriteLine( this + " interacts with " + a ); } } // "ProductA2" class ProductA2 : AbstractProductA { } // "ProductB2" class ProductB2 : AbstractProductB { // Methods override public void Interact( AbstractProductA a ) { Console.WriteLine( this + " interacts with " + a ); } } // "Client" - the interaction environment of the products class Environment { // Fields private AbstractProductA AbstractProductA; private AbstractProductB AbstractProductB; // Constructors public Environment( AbstractFactory factory ) { AbstractProductB = factory.CreateProductB(); AbstractProductA = factory.CreateProductA(); } // Methods public void Run() { AbstractProductB.Interact( AbstractProductA ); } } /**/ /// <summary> /// ClientApp test environment /// </summary> class ClientApp { public static void Main(string[] args) { AbstractFactory factory1 = new ConcreteFactory1(); Environment e1 = new Environment( factory1 ); e1.Run(); AbstractFactory factory2 = new ConcreteFactory2(); Environment e2 = new Environment( factory2 ); e2.Run(); } }
[dvnews_page]
|
|