为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

工厂设计模式

2017-09-02 3页 doc 16KB 18阅读

用户头像

is_842972

暂无简介

举报
工厂设计模式工厂设计模式 简单工厂(Simple Factory)模式 工厂方法(Factory Method)模式 抽象工厂(Abstract Factory)模式 Simple Factory模式根据提供给它的数据,返回几个可能类中的一个类的实例。通常它返回的类都有一个公共的父类和公共的方法。 Simple Factory模式实际上不是GoF 23个设计模式中的一员 工厂方法模式与简单工厂模式工厂方法模式与简单工厂模式再结构上的不同不是很明显。 工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。工厂...
工厂设计模式
工厂设计模式 简单工厂(Simple Factory)模式 工厂(Factory Method)模式 抽象工厂(Abstract Factory)模式 Simple Factory模式根据提供给它的数据,返回几个可能类中的一个类的实例。通常它返回的类都有一个公共的父类和公共的方法。 Simple Factory模式实际上不是GoF 23个设计模式中的一员 工厂方法模式与简单工厂模式工厂方法模式与简单工厂模式再结构上的不同不是很明显。 工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口,或者有共同的抽象父类。当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了"开放,封闭"原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。工厂方法模式退化后可以演变成简单工厂模式。 五、 Factory Method模式演化抽象工厂角色和抽象场频角色都可以选择由接口或抽象类实现。抽象工厂角色可以规定出多于一个的工厂方法,从而使具体工厂角色实现这些不同的工厂方法,这些方法可以提供不同的商业逻辑,以满足提供不同的产品对象的任务。工厂方法总是调用产品类的构造函数以创建一个新的产品实例,然后将这个实例提供给客户端。而在实际情形中,工厂方法所做的事情可以相当复杂。一个常见的复杂逻辑就是循环使用产品对象。工厂对象将已经创建过的产品登记到一个聚集中,然后根据客户所请求的产品状态,向聚集查询。如果有满足要求的产品对象,就直接将产品返回客户端;如果聚集中没有这样的产品对象,那么就创建一个新的满足要求的产品对象,然后将这个对象登记到聚集中,再返还给客户端。"享元模式(Flyweight Pattern)"就是这样一个模式。一个工厂方法模式的实现依赖于工厂角色和产品角色的多态性。在有些情况下,这个模式可以出现退化。工厂方法返回的类型应当是抽象类型,而不是具体类型。调用工厂方法的客户端应当依赖抽象产品编程,而不是具体产品。如果工厂仅仅返回一个具体产品对象,便违背了工厂方法的用意,发生退化,这时就不再是工厂模式了。 工厂的等级结构:工厂对象应当有一个抽象的超类型。如果等级结构中只有一个具体工厂类的话,抽象工厂就可以省略,发生了退化。 六、 Factory Method模式与其它模式的关系与工厂方法模式有关的模式还包括:模板方法模式、MVC模式、享元模式、备忘录模式七、 另外一个例子 // Factory Method pattern -- Real World example using System;using System.Collections; // "Product"abstract class Page{} // "ConcreteProduct"class SkillsPage : Page{} // "ConcreteProduct"class EducationPage : Page{} // "ConcreteProduct"class ExperiencePage : Page{} // "ConcreteProduct"class IntroductionPage : Page{} // "ConcreteProduct"class ResultsPage : Page{} // "ConcreteProduct"class ConclusionPage : Page{} // "ConcreteProduct"class SummaryPage : Page{} // "ConcreteProduct"class BibliographyPage : Page{} // "Creator"abstract class Document{ // Fields protected ArrayList pages = new ArrayList(); // Constructor public Document() { this.CreatePages(); } // Properties public ArrayList Pages { get{ return pages; } } // Factory Method abstract public void CreatePages();} // "ConcreteCreator"class Resume : Document{ // Factory Method implementation override public void CreatePages() { pages.Add( new SkillsPage() ); pages.Add( new EducationPage() ); pages.Add( new ExperiencePage() ); }} // "ConcreteCreator"class Report : Document{ // Factory Method implementation override public void CreatePages() { pages.Add( new IntroductionPage() ); pages.Add( new ResultsPage() ); pages.Add( new ConclusionPage() ); pages.Add( new SummaryPage() ); pages.Add( new BibliographyPage() ); }} /**//// /// FactoryMethodApp test/// class FactoryMethodApp{ public static void Main( string[] args ) { Document[] docs = new Document[ 2 ]; // Note: constructors call Factory Method docs[0] = new Resume(); docs[1] = new Report(); // Display document pages foreach( Document document in docs ) { Console.WriteLine( " " + document + " ------- " ); foreach( Page page in document.Pages ) Console.WriteLine( " " + page ); } }}
/
本文档为【工厂设计模式】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索