设计模式之创建型模式.doc_第1页
设计模式之创建型模式.doc_第2页
设计模式之创建型模式.doc_第3页
设计模式之创建型模式.doc_第4页
设计模式之创建型模式.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件英才网 软件行业驰名招聘网站设计模式之创建型模式来自何静媛的博客创建型模式: 抽象工厂模式 工厂方法模式 建造者模式 原型模式 单例模式创建型模式,就是用来创建对象的模式,抽象了实例化的过程。它帮助一个系统独立于如何创建、组合和表示它的那些对象对于抽象工厂模式和工厂方法模式查看上篇博文设计模式之工厂模式,下面就来介绍一下其余3个模式建造者模式建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同内部表象的产品对象。如果我们用了建造者模式,那么用户就只需指定需要建造的类型即可,而具体建造的过程和细节就不需要知道了。个人理解:建造者模式就是将一个复杂对象的构件过程抽象出来(PersonBuilder),不让任何人遗忘当中的任何一步。然后创建一个指挥者类(Director),用它类控制建造过程,也用它来隔离用户与建造过程的关联课本实例:建造小人与工厂方法模式和抽象工厂模式对比:举例说明:建造超人工厂方法:通过不同的工厂生产不同的超人,注重的是整体对象的创建方法建造者:注重的是部件构件的过程,旨在通过一步步的精确构造创建出一个复杂的对象。在这个例子中主要是通过具体建造方法建造超人。抽象工厂:通过不同的工厂生产一系列超级英雄,注重完整性。如图: 代码如下:csharpview plaincopyprint?1. /抽象类2. abstractclasspersonbuilder3. 4. protectedGraphicsg;5. protectedPenp;6. 7. publicpersonbuilder(Graphicsg,Penp)8. 9. this.g=g;10. this.p=p;11. 12. 13. publicabstractvoidbuildhead();14. publicabstractvoidbuildbody();15. publicabstractvoidbuildarmleft();16. publicabstractvoidbuildarmright();17. publicabstractvoidbuildlegleft();18. publicabstractvoidbuildlegright();19. 20. 21. 22. /指挥者23. classpersonDirector24. 25. privatepersonbuilderpb;26. publicpersonDirector(personbuilderpb)27. 28. this.pb=pb;29. 30. 31. publicvoidcreateperson()32. 33. pb.buildhead();34. pb.buildbody();35. pb.buildarmleft();36. pb.buildarmright();37. pb.buildlegleft();38. pb.buildlegright();39. 40. 41. 42. 原型模式用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式其实就是从一个对象再创建另一个可定制的对象,而且不需要知道任何可创建的细节。课本实例:简历复印代码如下:csharpview plaincopyprint?1. publicobjectClone()2. 3. return(object)this.MemberwiseClone();4. 5. 6. 注:MemberwiseClone()方法是这样,如果字段是值类型,则对该字段执行逐位复制,如果字段是引用类型,则复制引用但不复制引用的对象,因此,原始对象及其复本引用同一对象总结:克隆是创建作为当前实例副本的新对象。克隆分为深度克隆和浅度克隆深度克隆:会克隆当前实例的所有所有成员.浅度克隆:只会克隆当前实例的所有值类型的。浅度克隆Object类为我们提供了一个受保护的克隆方法MemberwiseClone()深度克隆要我们自己实现MemberwiseClone方法创建一个浅表副本,具体来说就是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。个人理解: 浅拷贝和深拷贝浅拷贝对于引用的内容来说只是复制了地址,然后给地址赋值,但深拷贝的引用内容却是根据每个参数不同来实例出一个新的对象浅拷贝只是拷贝了引用,指向一个地址空间,而深拷贝是根据参数的不同对这个引用创建新的实例单例模式通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。注意问题: 多线程的程序中,多个线程同时,注意是同时访问Singleton类,调用GetInstance()方法,会有可能造成创建多个实例的。线程加锁lock是确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。课本实例:只实例化一次工具箱窗体代码如下:csharpview plaincopyprint?1. privateFormToolbox()2. 3. InitializeComponent();4. 5. publicstaticFormToolboxGetInstance()6. 7. if(ftb=null|ftb.IsDisposed)8. 9. lock(syncRoot)10. 11. if(ftb=null|ftb.IsDisposed)12. 13. ftb=newFormTool

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论