设计模式入门(原创)

什么是设计模式:
      20世纪60年代的软件危机使得人们开始重视软件工程的研究。起初,人们把软件设计的重点放在数据结构和算法的选择上。随着软件系统规模越来越大、越来越复杂,整个系统的结构和规格说明也显得越来越重要。面对日益复杂的软件系统,人们开始认识到,要真正实现软件的工业化生产方式,达到软件产业发展所需要的软件生产率和质量,软件复用是一条现实可行的途径。

        设计模式第一次是由架构设计师 Christopher Alexander 在他所著的 A Pattern Language: Towns, Buildings, Construction(Oxford University Press,1977)一书中提到的。

        他引入了这一概念,并称为模式 ― 对于反复出现设计问题的抽象解决方案 ― 这一概念吸引了其它领域中一些研究人员的注意,特别是二十世纪八十年代中后期,那些开发面向对象的软件人员。

        Christopher Alexander 在他的书中指出:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”

       内行的设计者知道:不是解决任何问题都要从头做起。他们更愿意复用以前使用过的解决方案。当找到一个好的解决方案,他们会一遍又一遍地使用。这些经验是他们成为内行的部分原因。

        小说家和剧本作家很少从头开始设计剧情。他们总是沿袭一些业已存在的模式,像“悲剧性英雄”模式(《麦克白》、《哈姆雷特》等)或“浪漫小说”模式(存在着无数浪漫小说)。

        1995年,《Design Pattern》(中译“设计模式”)一书问世,成为面向对象编程中使用模式化方法的开创性著作。
       这本书对于软件实践中的一些不断变换面孔重复出现、但特征和解决方案的本质却十分类似的问题进行了总结归纳,提炼出23个具有代表性的模式。


       设计模式本身并不是一种具体的“技术”,它讲述的是思想。它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧,还让开发人员能够真正掌握接口或抽象类的应用。更重要的是,该书提炼的这些设计模式反复强调的宗旨是尽量提高程序的使用率,让程序尽可能的可重用。

设计模式对于面向对象设计是一种有用的工具。
1. 模式提供了在一定的环境中解决某一问题的方案。
2. 模式以一种系统的方式获取经验丰富的设计人员的经验,并使之成为非专业人士可以使用的设计工具和学习工具。
3. 模式类别作为术语的词汇表,帮助理解公共的但又复杂的设计问题的解决方案。

单态设计模式举例

单态设计模式:采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供了一个取得其对象实例的方法。(P113)
  
举例:我们设计了一个钟表类, 并且要求程序中始终保持只有一个时钟对象,这个程序很大, 并不是一个人完成的。也就是说,如果只是一个人, 可以人为地记住只把时钟类实例化了一次, 可是,由于还有许多partner共同来实现这个程序 ,因此,必须想办法从程序设计上来保证它的实现,那么怎么做的呢?

程序设计如下:
class Singleton {
   private static Singleton _instance = null;
   protected Singleton() {
   }
   public static Singleton instance() {
       if (_instance == null) {
          _instance = new Singleton();
       }
       return _instance;
   }
}
程序解释:
       在这里, Instance方法是static 类型, 说明可以不用创建对象实例就可以实现对它的调用,而_instance是static类型的变量,即:类变量,它只与类相关。
       在静态Instance方法中使用惰性初始化,使得它只有第一次被调用时才创建唯一的Singletion实例。而构造函数可以定义为 private型,也可以定义为 protected 型, 这样就可以在子类的函数中重用它, 此时,如果其他人想用Singleton类实例化一个对象,就会得到一个编译错误,因为他只能通过Instance函数去访问第一次调用时所产生的唯一的对象_instance。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值