欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    经典文档-C#设计模式.pdf

    • 资源ID:88910168       资源大小:19.42MB        全文页数:220页
    • 资源格式: PDF        下载积分:12金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    经典文档-C#设计模式.pdf

    C#设计模式(+Q_).4一、C#面向对象程序设计复习.5二、设计模式举例.5三、先有鸡还是先有蛋?.7四、大瓶子套小瓶子还是小瓶子套大瓶子?.8五、.n e t本 质.9C#设计模式(2).1 1一、开放一封闭 原则(OCP).12二、里氏代换原则(LSP).12C#设计模式(3).19三、依赖倒置原则(DIP).19四、接口隔离原则(ISP).20五、合成/聚合复用原则(CARP).21六、迪米特法则(LoD).22C#设计模式(4)Sim pie Factory Pattern.24一、简单工厂(Simple Factory)模式.24二、Sim pie Factory模式角色与结构:.24三、程序举例:.25四、Sim pie Factory 模式演化.27五、优点与缺点:.29C#设计模式(5)Factory Method Pattern.30一、工厂 方 法(Factory Method)模式.30二、Factory Method模式角色与结构:.30三、程序举例:.31四、工厂方法模式与简单工厂模式.33五、Factory Method 模式演化.34六、Factory Method模式与其它模式的关系.35七、另外一个例子.35C#设计模式(6)Abstract Factory Pattern.38一、抽象工厂(Abstract F actory)模式.38二、Abstract Factory 模式的结构:.39三、程序举例:.41四、在什么情形下使用抽象工厂模式:.44五、抽象工厂的起源.45六、Abstract Factory模式在实际系统中的实现.46七、开放一封闭 原则.50C#设计模式(7)Singleton Pattern.50一、单 例(S ingleton)模式.50二、Singleton模式的结构:.51三、程序举例:.51四、在什么情形下使用单例模式:.52五、Singleton模式在实际系统中的实现.53六、C#中的Singleton模式.55C#设计模式(8)Builder Pattern.57一、建 造 者(B u ild e r)模式.57二、Builder模式的结构:.58三、程序举例:.58四、建造者模式的活动序列:.62五、建造者模式的实现:.62六、建造者模式的演化.68七、在什么情况下使用建造者模式.69C#设计模式(9)-P rototype Pattern.70一、原 型(P rototype)模式.70二、Prototype模式的结构:.71三、程序举例:.71四、带Prototype M anager的原型模式.73五、浅拷贝与深拷贝.77六、Prototype模式的优点与缺点.79C#设计模式(10)Adapter Pattern.80一、适 配 器(A dap ter)模式.80二、类的Adapter模式的结构:.81三、类的Adapter模式示意性实现:.81四、对象的Adapter模式的结构:.83五、对象的Adapter模式示意性实现:.84六、在什么情况下使用适配器模式.85七、一个实际应用Adapter模式的例子.85八、关于A dapter模式的讨论.87C#设计模式(1 1 )Com posite Pattern.88一、合 成(Com posite)模式.88二、合成模式概述.88三、安全式的合成模式的结构.8990四、安全式的合成模式实现.90W-五、透明式的合成模式结构.93六、透明式的合成模式实现.94七、使用合成模式时考虑的几个问题.97八、和尚的故事.9798九、一1V实际应用Com posite模式的例子.98C#设计模式(12)Decorator Pattern.101一、装 饰(Decorator)模式.101二、装饰模式的结构.KM4O2三、装饰模式示例性代码.102403四、装饰模式应当在什么情况下使用.105-W6五、装饰模式实际应用的例子.106六、使用装饰模式的优点和缺点.110七、模式实现的讨论.H0+4-八、透明性的要求.111九、装饰模式在.NET中的应用.112C#设计模式(13)Proxy Pattern.113一、代 理(P r o x y)模式.113二、代理的种类.114三、远程代理的例子.114四、代理模式的结构.115五、代理模式示例性代码.115六、高老庄悟空降八戒.117七、不同类型的代理模式.118八、代理模式实际应用的例子.119设计模式(1 4)F ly w e ig h t P a tte rn.122、享 元(Flyw e ig h t)模式.122二、单纯享元模式的结构.122三、单纯享元模式的示意性源代码.123四、复合享元模式的结构.125五、一个咖啡摊的例子.127六、咖啡屋的例子.130七、享元模式应当在什么情况下使用.133八、享元模式的优点和缺点.133434设计模式(1 5)-F a c a d e P a tte rn.134、门 面(F a c a d e)模式.134二、门面模式的结构.134三、门面模式的实现.135四、在什么情况下使用门面模式.135五、一个例子.136六、使用门面模式的设计.140设计模式(1 6)B rid g e P a tte rn.144一、桥 梁(B r id g e)模式.144二、桥梁模式的结构.145三、桥梁模式的示意性源代码.146四、调制解调器问题.149五、另外一个实际应用B rid g e模式的例子.153六、在什么情况下应当使用桥梁模式.158设计模式(1 7)C hain of R e s p o n s ib ility P a tte rn.158一、职 责 链(C hain of R e s p o n s ib ility)模式.160二、责任链模式的结构.160三、责任链模式的示意性源代码.160四、纯的与不纯的责任链模式.163五、责任链模式的实际应用案例.163六、责任链模式的实现.168设计模式(1 8)Com m and P a tte rn.168一、命 令(Com m and)模式.168二、命令模式的结构.168三、命令模式的示意性源代码.169四、玉帝传美猴王上天.172五、命令模式的实现.172六、命令模式的实际应用案例.173七、在什么情况下应当使用命令模式.177八、使用命令模式的优点和缺点.178设计模式(1 9)O b s e rv e r P a tte rn.178一、观 察 者(O b s e r v e r)模式.178二、观察者模式的结构.179三、观察者模式的示意性源代码.180四、C#中的 D e le g a te 与 E v e n t.183五、一个实际应用观察者模式的例子.187六、观察者模式的优缺点.191设计模式(2 0)-V is ito r P a tte rn.192一、访 问 者(V is ito r)模式.192二、访问者模式的结构.193三、示意性源代码.194四、一个实际应用V is ito r模式的例子.198五、在什么情况下应当使用访问者模式.202六、使用访问者模式的优点和缺点.203设计模式(21)Tem p la te M e th o d P a tte rn.204一、模板方法(T e m p la te M e th o d)模 式.204二、模版方法模式的结构.204三、模板方法模式的示意性代码.205四、继承作为复用的工具.207五、一个实际应用模板方法的例子.208六、模版方法模式中的方法.210七、重构的原则.211设计模式(2 2)S tra te g y P a tte rn.211一、策 略(S tr a te g y)模式.211二、策略模式的结构.212三、示意性源代码.212四、何时使用何种具体策略角色.215五、一个实际应用策略模式的例子.215六、在什么情况下应当使用策略模式.218七、策略模式的优点和缺点.218八、其它.219C#设计模式(1)课本:0#设计模式,电子工业出版社,ISBN 7-5053-8979-30 3 3元含光盘。课程内容:设计模式来源:亚历山大的建筑模式、Gamma等 人(1995)创作的Design Patterns:Elements ofReusable S oftw are.这本书通常被称作Gang of Four或G oF,开创性的创造了 设计模式。也有人说 三十六计 就是 模式。一、C#面向对象程序设计复习点击 http:/ 下载,内容包括:字段与属性.cs属性、方法作用范围.CS-加到一百.CS使用接口排序(2).CS使用接口排序(1).C S求质数.cs冒泡法排序.cs九九表.cs静态与非静态.cs构造函数.cs方法重载.cs多态性.cs递归求阶乘.cs打印三角形.cs传值调用与引用调用.cs二、设计模式举例在设计模式中有一种模式叫Builder模式,其原理如下:我们可以将Builder理解成电饭锅,给这个Builder放进去米和水,经过Builder的 Build后,我们就可以取出香喷喷的米饭了。C#中有一个类叫StringBuilder,输入必要的信息后,就可以取出对应的String。其使用方法如下:using System;using System.Text;class Exam0Spublic static void Main()白 由(StringBuilder sb=new StringBuilder();sb.Append(a,2);sb.Append(b,3);sb.Append(c,4);I Console.WriteLine(sb.ToStringO);打印出 aabbbccccI sb.Remove(0,sb.Length);清除sb 中的所有信息卜 L)程序执行结果为:aabbbcccc请使用StringBuilder对以下打印三角型的程序进行改写,写出新程序。using System;public class Exam日 叫public static void Main()白 由(I Console.Write(”请输入行数:“);int lines=int.Parse(Console.ReadLine();I Con sole.WriteLine(n);I for(int i=1;i=lines;i+)均由for(int k=1;k=lines-i;k+)I Console.Write(M);I for(int j=1;j=i*2-1;j+)I Console.Write(u*);I Console.WriteLine(,M,);卜)卜 L答:using System;using System.Text;class Exam日 期public static void Main()附 I Console.Write(请输入行数:);int lines=int.Parse(Console.ReadLine();I Console.WriteLine();IStringBuilder sb=new StringBuilder();Ifor(int i=1;i=r.getWidth()白 由(r.setWidth(r.getWidth()+1);)Rectangle日H acs冰-heightJong-widthJong日M a fx ygetHeightdonggetWidthdongsetHeight:void+setWidlh:voidASmartTest日Me 6adsresize:voidSquare0 fqg-sideJonggetHeightdonggetS ide Jong*getWidth:longsetHeight:void*setSide:void+setWidlh:void在执行SmartTest的resize方法时,如果传入的是长方形对象,当高度大于宽度时;会自动增加宽度直到超出高度。但是如果传入的是正方形对象,则会陷入死循环。代码重构public interface Quadrangle0S(I public long getWidth();public long getHeight();public class Rectangle:Quadrangle日 刊 private long width;private long height;Ipublic void setWidth(long width)心由(this.width=width;public long getWidth()的I return this.width;卜)public void setHeight(long height)白由this.height=height;卜)public long getHeight()白由(return this.height;public class Square:Quadrangle0 E lprivate long side;Ipublic void setSide(long side)中由this.side=side;public long getSide()return side;public long getWidth()附return getSide();public long getHeight()钟return getSide();卜)LinterfaceQuadranglegetWidth:longgetHeight:long-P rotfertnryASmartTest F tciO fi口 M ethods+resize:voidSquare 区 疫-sidelong*getHeight:long*getS ide Jong+getWidth:longsetSide:voidPmiienuRectangleEJ FQ N S-height:long-width longQ M ethods+getHeight:long+getWidth:long+setHeight:void+setWidth:void P on)c:ticsC#设计模式(3)三、依赖倒置原则(DIP)依赖倒置(Dependence Inversion Principle)原则讲的是:要依赖于抽象,不要依赖于具体。简单的说,依赖倒置原则要求客户端依赖于抽象耦合。原则表述:抽象不应当依赖于细节;细节应当依赖于抽象;要针对接口编程,不针对实现编程。反面例子:ToggkSwitch-liglil.Light+Tog 以)缺点:耦合太紧密,Light发生变化将影响ToggleSwitch。解决办法一:将Light作成Abstract,然后具体类继承自Light.优点:Toggleswitch依赖于抽象类Light,具有更高的稳定性,而BulbLight与TubeLight继承自Light,可以根据开放一封闭原则进行扩展。只要Light不发生变化,BulbLight与TubeLight的变化就不会波及ToggleSwitch。缺点:如果用Toggleswitch控制一台电视就很困难了。总不能让TV继承自Light吧。解决方法二:IIJ ISwitchabk LI y-TumOnO V II 卜 TumOfff)I IlojgjIcSwitch-switchable:ISwitchablc4-ToggleO优点:更为通用、更为稳定。结论:使用传统过程化程序设计所创建的依赖关系,策略依赖于细节,这是糟糕的,因为策略受到细门改变的影响。依赖倒置原则使细节和策略都依赖于抽象,抽象的稳定性决定了系统的稳定性。四、接口隔离原则(ISP)接口隔离原则(Interface Segregation Principle)讲的是:使用多个专门的接口比使用单一的总接口总要好。换而言之,从一个客户类的角度来讲:一个类对另外一个类的依赖性应当是建立在最小接口上的。过于臃肿的接口是对接口的污染。不应该强迫客户依赖于它们不用的方法。My object-oriented umbrella(摘自 Design Patterns Explained)Let me tell you about my great umbrella.It is large enough to get into!In fact,threeor four other people can get in it with me.While we are in it,staying out of the rain,I can move it from one place to another.It has a stereo system to keep meentertained while I stay dry.Amazingly enough,it can also condition the air to makeit warmer or colder.It is one cool umbrella.My umbrella is convenient.It sits there waiting for me.It has wheels on it so that Ido not have to carry it around.I dont even have to push it because it can propelitself.Sometimes,I will open the top of my umbrella to let in the sun.(Why I amusing my umbrella when it is sunny outside is beyond me!)In Seattle,there are hundreds of thousands of these umbrellas in all kinds of colors.Most people call them cars.实现方法:1、使用委托分离接口2、使用多重继承分离接口五、合成/聚合复用 原 则(CARP)合成/聚合复用原则(Composite/Aggregate Reuse Principle或CARP)经常又叫做合成复用 原 则(Composite Reuse Principle或CRP),就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新对象通过向这些对象的委派达到复用已有功能的目的。简而言之,要尽量使用合成/聚合,尽量不要使用继承。o Design to interfaces.o Favor composition over inheritance.o Find what varies and encapsulate it.(摘自:Design Patterns Explained)区分”Has-A”与“Is-A”“Is-A”是严格的分类学意义上定义,意思是一个类是另一个类的“一种“。而Has-A则不同,它表示某一个角色具有某一项责任。导致错误的使用继承而不是合成/聚合的 个常见的原因是错误的把“Has-A当作I s-A”。例如:实际上,雇员、经理、学生描述的是一种角色,比如一个人是经理必然是雇员,另外一个人可能是学生雇员,在上面的设计中,一个人无法同时拥有多个角色,是雇员就不能再是学生了,这显然是不合理的。错误源于把角色的等级结构与人的等级结构混淆起来,误把Has-A”当作Is-A。解决办法:六、迪米特法则(LoD)迪米特法则(Law of Demeter或简写LoD)又叫最少知识原则(Least Knowledge Principle或简写为LKP),也就是说,一个对象应当对其它对象有尽可能少的了解。其它表述:只与你直接的朋友们通信不要跟 陌生人”说话每一个软件单位对其它的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。迪米特法则与设计模式Facade 模式、Mediator 模式使民无知 老子第三章曰:是以圣人之治,虚其心,实其腹,弱其志,常使民无知无欲。使被 统治的对象 愚昧 化,处于 无知 的状态,可以使 统治 的成本降低。所谓“最少知识 原则,实际上便是老子的 使民无知 的统治之术。不相往来 老子云:小国寡民 邻国相望,鸡犬之声相闻,民至老死,不相往来。”将被统治的对象隔离开来,使它们没有直接的通信,可以达到分化瓦解,继而分而治之的效果。迪米特法则与老子的 小国寡民 的统治之术不谋而合。C#设计模式(4)Sim pie Factory Pattern工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将明1,一个类实例化,不必事先知道每次要实例化哪一个类。工厂模式有以下几种形态:简单工厂(Simple Factory)模式 工厂方法(Factory Method)模式 抽象工厂(Abstract Factory)模式一、简单工厂(Simple Factory)模式Simple Factory模式根据提供给它的数据,返回几个可能类中的个类的实例。通常它返回的类都有一个公共的父类和公共的方法。Simple Factory模式实际上不是GoF 23个设计模式中的一员。二、Sim pie Factory模式角色与结构:Create工厂类角色Creator(LightSimpleFactory):工厂类在客户端的直接控制下(Create方法)创建产品对象。抽象产品角色Product(Light):定义简单工厂创建的对象的父类或它们共同拥有的接口。可以是一个类、抽象类或接口。具体产品角色ConcreteProduct(BulbLight,TubeLight):定义工厂具体加工出的对象。三、程序举例:using System;public abstract class Light日叫public abstract void TurnOn();public abstract void TurnOff();Ipublic class BulbLight:Light日叫public override void TurnOn()白由(Console.WriteLine(Bulb Light is Turned on);卜)Ipublic 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);卜)Ipublic override void TurnOff()的Console.WriteLine(Tube Light is Turned off);卜)4public class LightSimpleFactory日 叫public Light Create(string LightType)自由(I if(LightType=Bulb)return new BulbLight();I else if(LightType=Tube)return new TubeLight();elsereturn null;卜 4public class Client日 叫public static void Main()白由LightSimpleFactory Isf=new LightSimpleFactory();II Light I=lsf.Create(,BulbM);LTurnOn();I LTurnOff();IConsole.WriteLine(M-);I=lsf.Create(Tube);LTurnOn();LTurnOff();L四、Sim pie Factory模式演化Simple Factory 模式演化(一)除了上面的用法外,在有些情况下Simple Factory可以由抽象产品角色扮演,一个抽象产品类同时是子类的工厂。Create程序举例:using System;public class Light日 出 public virtual void TurnOn()由由(卜)Ipublic virtual void TurnOff()白由(卜)Ipublic static Light Create(string LightType)白由(I if(LightType=Bulb)I return new BulbLight();I else if(LightType=Tube)return new TubeLight();elsereturn null;卜)L public class BulbLight:Light日 研public override void TurnOn()的Console.WriteLine(Bulb Light is Turned on);卜)Ipublic 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);卜)Ipublic override void TurnOff()白由(Console.WriteLine(Tube Light is Turned off);卜)public class Client日叫public static void Main()白由(Light I=Light.Create(Bulb);LTurnOn();I LTurnOff();IConsole.WriteLine(.II=Light.Create(Tube);LTurnOn();I LTurnOff();卜)L)Simple Factory 模式演化(二)三个角色全部合并:1 加1 1 untOni jrumO愕),(I:Liizhi与单件模式(Singleton)相近,但是有区别。五、优点与缺点:优点:工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅 消费”产品。简单工厂模式通过这种做法实现了对责任的分割。缺点:当产品有复杂的多层等级结构时,工厂类只有自己,以不变应万变,就是模式的缺点。因为工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。同时,系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,有可能造成工厂逻辑过于复杂。另外,简单工厂模式通常使用静态工厂方法,这使得无法由子类继承,造成工厂角色无法形成基于继承的等级结构。C#设计模式(5)Factory Method Pattern一、工厂方法(Factory M e th o d)模式工厂 方 法(FactoryMethod)模式是类的创建模式,其用意是定义个创建产品对象的工厂接口,将实际创建工作推迟到子类中。工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。这个核心类仅仅负责给出具体工厂必须实现的接口,而不接触哪一个产品类被实例化这种细节。这使得工厂方法模式可以允许系统在不修改工厂角色的情况卜引进新产品。在Factory Method模式中,工厂类与产品类往往具有平行的等级结构,它们之间一一对应。二、Factory M ethod模式角色与结构:抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。在上图中有两个这样的角色:BuIbCreator 与 TubeCreator。抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。在上图中,这个角色是Light。具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。三、程序举例:using System;public abstract class Light日国public abstract void TurnOn();public abstract void TurnOff();L)public class BulbLight:Light00(public override void TurnOn()由 由 Console.WriteLine(Bulb Light is Turned on);Ipublic override void TurnOff()中 中 Console.WriteLine(HBulb Light is Turned off);public class TubeLight:Light日刊public override void TurnOn()中 中 Console.WriteLine(Tube Light is Turned on);public override void TurnOff();1 Console.WriteLine(Tube Light is Turned off);Ipublic abstract class Creator日叫public abstract Light factory();public class BuIbCreator:CreatorE J public override Light factory()中 中 return new BulbLight();L)public class TubeCreator:CreatorS(public override Light factory()韩 return new TubeLight();public class Client日叫public static void Main()的Creator c1=new BulbCreator();Creator c2=new TubeCreator();ILight 1 1 =c1.factory();Light I2=c2.factory();I1 1 .TurnOn();I M.TurnOffO;Console.WriteLine(l2.TurnOn();l2.TurnOff();卜)工厂方法的活动序列图活动过程包括:客户端创建BuIbCreator对象,客户端持有此对象的类型是C reator,而实际类型是BulbCreator0然后客户端调用BuIbCreator的factory方法,之后BuIbCreator调用BulbLight的构造函数创造出产品BulbLight对象。四、工厂方法模式与简单工厂模式工厂方法模式与简单工厂模式再结构上的不同不是很明显。工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口,或者有共同的抽象父类。当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了 开放一封闭 原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。工厂方法模式退化后可以演变成简单工厂模式。五、Factory Method模式演化使用接口或抽象类抽象工厂角色和抽象场频角色都可以选择由接I 或抽象类实现。使用多个工厂方法抽象工厂角色可以规定出多于一个的工厂方法,从而使具体工厂角色实现这些不同的工厂方法,这些方法可以提供不同的商业逻辑,以满足提供不同的产品对象的任务。产品的循环使用工厂方法总是调用产品类的构造函数以创建个新的产品实例,然后将这个实例提供给客户端。而在实际情形中,工厂方法所做的事情可以相当复杂。一个常见的复杂逻辑就是循环使用产品对象。工厂对象将已经创建过的产品登记到一个聚集中,然后根据客户所请求的产品状态,向聚集查询。如果有满足要求的产品对象,就直接将产品返回客户端;如果聚集中没有这样的产品对象,那么就创建一个新的满足要求的产品对象,然后将这个对象登记到聚集中,再返还给客户端。享元模式(Flyweight Pattern)就是这样一个模式。多态性的丧失和模式的退化一个工厂方法模式的实现依赖于工厂角色和产品角色的多态性。在有些情况下,这个模式可以出现退化。工厂方法返回的类型应当是抽象类型,而不是具体类型。调用工厂方法的客户端应当依赖抽象产品编程,而不是具体产品。如果工厂仅仅返回一个具体产品对象,便违背了工厂方法的用意,发生退化,这时就不再是工厂模式了。工厂的等级结构:工厂对象应当有一个抽象的超类型。如果等级结构中只有一个具体工厂类的话,抽象工厂就可以省略,发生了退化。六、Factory M ethod模式与其它模式的关系与工厂方法模式有关的模式还包括:模板方法模式、MVC模式、享元模式、备忘录模式七、另外一个例子/Factory Method pattern-Real World exampleusing System;using System.Collections;/Productabstract class PageS/ConcreteProductclass SkillsPage:Page日叫L)/ConcreteProductclass EducationPage:Page日日/ConcreteProductclass Experience Page:Page日典L)/ConcreteProductclass IntroductionPage:Page日叫4/ConcreteProductclass ResultsPage:Page00(I/ConcreteProductclass ConclusionPage:Page日刊L)/ConcreteProductclass Su mm ary Page:Page日日L)/ConcreteProductclass BibliographyPage:Page日叫L)/Creatorabstract class Document日困I/Fieldsprotected ArrayList pages=new ArrayList();II /Constructorpublic Document()的this.CreatePages();卜II /Propertiespublic ArrayList Pages白由(白 申 get return pages;卜I/Factory Methodabstract public void CreatePages();L)/ConcreteCreatorclass Resume:Document日El/Factory Method implementationoverride public void CreatePages()中由(pages.Add(new SkillsPage();pages.Add(new EducationPage();pages.Add(new ExperiencePage();卜L)/ConcreteCreatorclass Report:Document日 困/Factory Method implementationoverride public void CreatePages()的pages.Add(new lntroductionPage();pages.Add

    注意事项

    本文(经典文档-C#设计模式.pdf)为本站会员(文***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开