设计模式这个词无论是从字面上还是从具体意义上看都有着一种与众不同的气质.单说设计和模式都是够份量的词.
   名词解释:引自百度知道
   设计:
   人类通过劳动改造世界,创造文明,创造物质财富和精神财富,而最基础、最主要的创造活动是造物。设计便是造物活动进行预先的计划,可以把任何造物活动的计划技术和计划过程理解为设计.意指有目标和计划的创作行为.
   模式:
   前人积累的经验的抽象和升华。简单地说,就是从不断重复出现的事件中发现和抽象出的规律,是解决问题的经验的总结。只要是一再重复出现的事物,就可能存在某种模式。
   一般一听说别人是搞设计的都非常佩服,无论是否是IT行业,觉的做设计的总是能从全局出发,均衡的考虑问题,比起最底层的工作者来说总是高那么一点点.
   程序员都希望自己的程序写的代码结构强壮,容易维护,扩展性强,而设计模式也许是实现这一想法的最好理论.所以很多程序员(包括本人)都希望有自己的程序中用上那么一点点的设计模式,即使作用并不那么明显,也会有种成就感.但是并不是所有的程序员都能非常容易的找到这样的机会,虽然清楚23种模式的定义,但在具体的项目中并不知道应该如何来用.
   还有一种情况是,当自己对设计模式的全部概念并不是特别清楚的时候,例如建造者模式,他们的程序中往往都应用到了某种模式,只是没有太在意而已. .Net中的StringBuilder就是应用了建造者模式.
   这里以我的经历来说明一下,我以前在一个项目中开发了一个分页控件. 但我是在学习了建造者模式后才发现是应用了模式.
   我们知道所有的控件,包括用户控件和自定义控件它们都是继承自Control类,在自定义控件中我重写了它的如下些方法:
  Code
  //重写服务器控件的输出标记
  protected override HtmlTextWriterTag TagKey
   {
   get
   {
   return HtmlTextWriterTag.Div;
   }
   }
  //重写服务器控件内容输出前的事件
   protected override void OnPreRender(EventArgs e)
   {
   //分页样式表信息
   if (!this.CustomPager .IsCustomStyle)
   {
   this.AddStyleFile();
   }
   base.OnPreRender(e);
   }
  //重写服务器控件输出内容的方法
   protected override void RenderContents(HtmlTextWriter output)
   {
   //if (DesignMode)
   //{ return; }
   //写入分页信息
   this.CSgetPagerHtml(this.CustomPager .iRecordCount, this.CustomPager .iRowsCount, output);
   Page.VerifyRenderingInServerForm(this);
   }
   /** <summary>
   /// 控件加载事件
   /// </summary>
   /// <param name="e"></param>
   protected override void OnLoad(EventArgs e)
   {
   queryString = Page.Request.ServerVariables["Query_String"];
   currentUrl = Page.Request.Path;
   int i=0;
   if (this.CustomPager .UrlPaging==true &&!DesignMode )
   {
   if (!Page.IsPostBack)
   {
   int index;
   int.TryParse(Page.Request.QueryString[this.CustomPager .UrlPageIndexName], out index);
   if (index <= 0)
   index = 1;
   if(index >this .pageCount )
   {index =1;}
   PageChangingEventArgs args = new PageChangingEventArgs(index);
   OnPageChanging(args);
   }
   }
   if (!DesignMode)
   {
   inputPageIndex = Page.Request.Form[UniqueID + "_input"];
   int .TryParse (inputPageIndex ,out i);
   if (i < 1 || i > this.pageCount)
   { i = 1; }
   inputPageIndex = i.ToString();
   }
   base.OnLoad(e);
   }
   上面几个方法是控件固有的,所有的控件都会经历这样的生命周期,这个过程相对来说是稳定的,但是它的内部实现却是不固定而是可变的.这也是我们能写出功能不同的控件的原因.
   为了说明方便,先帖个建造者模式的类图:

程序员就相当于建造模式类图当中的Director,他的意图决定了自定义控件如何实现.例如我想做一个自定义的分面导航控件,Control类相当于Builder,它负责指引具体的生产者类(ConcreteBuilder)如果完成Director的意图.具体的生产者当然就ConcreteBuilder了,它按照Control类的指示来完成控件具体的创建过程.
   这样的程序在建造者模式中并不是标准的,它省略了抽象建造者角色及Director类.
   看来有时候你不想用模式都难,使用模式应该是一种顺其自然的现象,设计模式它是用来解决问题的,并不是让我们强行用它(强扭的瓜不甜),否则会因为过度的设计给原本简单的系统带来维护上的困难。
   上面的分页控件代码中可以看出,所谓建造者模式,它内容结构比较复杂,往往会包含非常多的方法等,但从整体上来说,创建过程相对稳定,但是它的内部成员不稳定。每个控件都具备相同的生命同期,从初始化到呈现到最后的销毁,但其中的实现过程又是不同的。
   针对这种情况就可以把相对复杂的创建过程抽象出来,让创建过程与实现过程分离,从而达到相同的创建过程可以实现
  不同的表现方式的目的.
   创建者模式的特点:
   1:最终创建的产品(Product)内部结构相对复杂
   2:Product的创建过程稳定.
   3:Product的内部对象的实现过程是可变动的。
   4:Product并不关心内部子系统如何实现(只求结果不关心过程).
   5:Product的创建过程与实现部分分离。
   6:同样的创建过程可以实现不同的表现结果.
   适用性:
   没有唯一的标准,如果开发者感觉自己的项目适合创建者模式的特点,那么你就可以尝试去用,否则还是少用。
   总结:
   设计模式离我们并不远,其实就在我们身边,就看你有没有心去关注它的存在了. 一个善于应用OO的程序员总会有机会把设计模式当成解决问题最好的武器

设计模式到底离我们有多远相关推荐

  1. 不懂编程的运维人员到底还能走多远?

    不懂编程的运维人员到底还能走多远? 首先,可以肯定的说,未来的IT岗位需要的是综合能力强的人员,运维.开发.数据库.网络,技术岗位对上述知识体系都要会一些,才能很好的胜任对应岗位工作. 下面已经不是趋 ...

  2. 光伏发电到底能带我们走多远?

    想象一下,我们所知的世界明天灭亡了.发生了世界级的大灾变:大流感.小行星撞击,或者核毁灭.绝大部分人都死了,文明倾毁,后启示录时代的幸存者们发现他们身处一个劫后世界:城市荒芜,人们互相劫掠,弱肉强食成 ...

  3. 在研究的道路上到底还能走多远

    曾记得刚跨入大学时,任何事情都想尝试,哪怕接二连三的失败也毫不在乎.碰到自己喜欢的女孩,敢去追求.面对别人背后的议论,依然自信满满,心中总有追求.可以为了一个技术问题,废寝忘食.面对毫无意义的问题,也 ...

  4. 设计模式-到底什么是builder模式

    我们来看一个一些常见的开源代码中带builder字样的经典类: (jdk)Stringbuilder (spring)springApplicationBuilder (es)xxxQuerybuli ...

  5. 关注 | 摩尔定律到底还能走多远?

    文章经授权转载自半导体行业观察(ID:icbank) 近日,三星公布了其半导体工艺路线图,除了今年下半年使用EUV的7nm量产之外,接下来还将有5nm和4nm FinFET,而到了2020年则会开始3 ...

  6. AR到底离我们有多远?

    AR技术的出现和发展,改变了人们对科技世界的认知和期望,它将虚拟和现实相结合,使人们的感官体验更加丰富和真实.在本文中,我们将谈论AR技术的基本概念.技术原理.应用领域以及未来发展趋势. 一.基本概念 ...

  7. 成功,到底离我们还有多远?

    这些年,我一直在思考,成功是否有个简单的公式,或者说,是一个简单的方式,自己在默默的总结.先学习"陈安之",再学习"李健",通篇读完"李嘉诚" ...

  8. 我的第一份外包经历及所得

    今年的6月份,我找到了我现在的公司,还不错,公司性质是软件外包,我也非常兴奋的来到了我的第一个客户工作.外包的人员和客户公司内部的人员当然在分工上会有很多不同的地方,因为外包人员是有时间的,所有不会安 ...

  9. 设计模式-进阶架构师必备知识(一篇读懂,就一篇)

    目录 设计模式 1.1 设计模式从何而来 1.2 设计模式是什么 1.3 设计模式有什么用 1.4 设计模式的七大原则 1.4.1 单一职责原则(Single Responsibility Princ ...

最新文章

  1. 购物商城---购物车,结算
  2. TextArea的滚动条看不到了,可能与height有关
  3. 【小练习01】CSS--PS提示框制作
  4. 如何使用Play框架为https配置SSL证书
  5. [Noip模拟赛] Power
  6. 构建smaba服务器
  7. matlab 每日学习 fft2 ifft2函数
  8. 2017 ICPCECIC 北方邀请赛 H MJF wants to work (贪心)
  9. handler机制,成功跳槽百度工资从15K涨到28K,挥泪整理面经
  10. zeromq初体验C语言版本测试程序及C++测试程序
  11. QGIS软件安装和汉化
  12. 判断数码管是共阳极还是共阴极
  13. 推荐几个顶级数据学习平台
  14. 集美大学部计算机学院,集美大学专业
  15. Nyzo验证者搭建教程(可能是最适合程序员参与的区块链)
  16. scat-批量删除预制发票
  17. 设计不是一个人就可以做出来的,集思广益通常到了中国就变成了意气之争,面子问题了...
  18. SpringBoot电脑商城--登录功能
  19. Linux 安装 Vmtools
  20. maven install 本地jar上传到本地仓库

热门文章

  1. C语言关于符号#和##
  2. 右值引用和move语义?
  3. QT的QAction类的使用
  4. QML基础类型之georectangle
  5. 初中计算机学情分析,初中信息技术教学计划
  6. ios oc数组转换为c语言数组,iOS中将数组作为参数传递给服务器
  7. 60.Java 代码编译和执行的整个过程
  8. B12_Numpy字符串函数(add,multiply,center,capitalize,title,lower,upper,split,join,replace,decode,splitline)
  9. rocketmq官网和其它资料
  10. Freemarker中如何遍历List