当前位置:编程学习 > XML/UML >>

“简”话设计模式(1)

答案:     第一章 引言
  
  1. 本文不适合…
  本文不适合想通过本文来装修房子的读者;
  
  本文不适合面向对象编程高手,会浪费你的时间。如果你愿意抽出时间来阅读本文,并提出宝贵的建议,非常感谢!什么?你没有听说过设计模式?那你也敢称高手?
  
  2. 本文适合…
  如果你对面向对象编程感兴趣,而又没有时间去读Gang of Four的“Design Patterns Elements of Reusable Object-Oriented Software”(以下简称《设计模式》)。那么,本篇文章将帮助你了解23种设计模式。
  
  我第一次读这本书是在每次晚睡之前,几乎每次都先睡着。《设计模式》以一种严谨,系统化的风格来论述23种设计模式,原书可以说是面向对象编程的一个基础教程,但是要领会其精髓,必须要花费一定的精力。本文的目的是为了帮助你更加方便地理解每一种设计模式,并不想成为原书的替代读物。
  
  本文无意于介绍面向对象的基本知识。因此,假设本文的读者已经对面向对象的封装性、继承性和多态性有足够的了解和认识。并能够认识到可复用的面向对象设计的两个原则: ● 针对接口编程,而不是针对实现编程;
   ● 优先使用对象组合,而不是类继承。
  
  
  3. 设计模式是什么?
  设计模式概念是由建筑设计师Christopher Alexander提出:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。”上述的定义是对设计模式的广义定义。我们将其应用到面向对象软件的领域内,就形成了对设计模式的狭义定义。
  
  我们可以简单的认为:设计模式就是解决某个特定的面向对象软件问题的特定方法。但严格的来说上述的认识是不准确的,难道面向对象软件中只有区区23个问题?当然不是。
  
  为了能够更加准确地理解这个概念,我们引入另外一个术语:框架(Framework)。框架这个词汇在当今有了各种各样的应用和含义。在设计模式中:框架(Framework)是构成一类特定软件可复用设计的一组相互协作的类。
  
  框架可以认为是一个适用于某个领域的软件包。这个软件包提供了相应领域的各个问题的解决方法。那么,它和设计模式有什么区别? ● 设计模式和框架针对的问题域不同:
   设计模式针对面向对象的问题域;框架针对特定业务的问题域;
  ● 设计模式比框架更为抽象:
   设计模式在碰到具体问题后,才能产生代码;框架已经可以用代码表示。
   ● 设计模式是比框架更小的体系结构元素:
   框架中可以包括多个设计模式。
  
  
  Tips:设计模式就像是在武功中基本的招式。我们将这些招式合理地组合起来,就形成套路(框架)。
  
  4. 为什么要用设计模式?
  作为程序员都知道良好程序的一个基本标准:高聚合,低耦合。面向对象语言比结构化语言要复杂的多,不良或者没有充分考虑的设计将会导致软件重新设计和开发。然而实际的设计过程中,设计人员更多的考虑如何解决业务问题,对于软件内部结构考虑较少;设计模式则补充了这个缺陷,它主要考虑如何减少对象之间的依赖性,降低耦合程度,使得系统更易于扩展,提高了对象可复用性。因此,设计人员正确的使用设计模式就可以优化系统内部的结构。
  
  第二章 概要简介
  
  在《设计模式》一书中,共包含23个模式。根据目的的不同,将它们分为三类: ● 创建型(Creational):解决如何创建对象的问题。
   ● 结构型(Structural):解决如何正确的组合类或对象的问题。
   ● 行为型(Behavioral):解决类或对象之间如何交互和如何分配职责的问题。
  
  
  Tips:设计模式中经常会用到抽象(Abstract)和具体(Concrete)这两个词。抽象的含义是指它所描述的类(方法)是接口类(方法),具体的含义是指它所描述的类(方法)实现了相应的抽象类(方法)。
  
  第三章 抽象工厂(Abstract factory)
  
  1. 意图
  提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
  
  2. 分类
  创建型模式。
  
  本文未经作者同意,严禁转载,违者必究!
  
  关于作者:
  杨宁是GrapeCity公司海外应用开发部技术骨干。从事多年的程序开发,有Unix,Windows平台上的开发经验。对VB,C#, VB.Net,XML有比较丰富的认识。喜爱研究OO的编程,分析,设计,项目管理等相关技术。喜欢学习新的技术。
  
  

上一个:架构设计中的方法学(2)——敏捷视图(2)
下一个:架构设计中的方法学(8)——架构愿景(2)

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,