DotNet设计模式

1. 什么是设计模式

  设计模式是对在软件设计过程中重复出现的问题提出了一种比较好的解决方案。正好一位专家所说:设计模式是对程序设计人员经常遇到的设计问题的可再现的解决方案。GOF设计模式通常被认为是其他设计模式的基础,随着业务复杂度的增大,会不断涌现新的设计模式,而这些新的设计模式一般会以GOF模式理论为参照。

2. 为什么要学习设计模式

  从个人职业规划来考虑。一位软件开发工程师随着编码量的增加,开发经验的增加,软件理论理解的加深,会不由自主地想一些方法或者捷径,来提高自己的生产率,而不是面对重复的问题做相同的工作,当你有这种想法的时候,就需要开始学习设计模式,设计模式会给你一些比较好的解决方案,不但解决了问题也提升了自己的能力,同时也是迈向软件设计师和架构师的过度阶段。

  从软件架构的角度来考虑。经济的快速发展造就了业务越来越复杂,那么如何使软件适应这种复杂的业务变化,在软件设计和架构时,适当地使用设计模式可以解决此问题,也要注意不要过度使用设计模式,否则全使系统变的更加复杂。设计模式也是代码重构的依据和工具,建议在代码重构时,尽量融入设计模式。

3.设计模式原则

  使用设计模式的根本原因是适用变化,提高代码复用率,使软件更具有可维护性可扩展性。需要遵循以下几个原则:单一职责原则,开放封闭原则,依赖倒置原则,里氏代换原则。

  3.1 单一职责原则

    就一个类而言,应该只有一个引起他变化的原因。如果一个承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会消弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。

  3.2 开放封闭原则

    软件实体(类,模块,函数等)应该可以扩展,但不可以修改。也就是说对扩展是开放的,对修改是封闭的。一般来说,面对需求,对程序的改动是通过添加新代码进行的,而不是更改现有代码。

  3.3 依赖倒置原则

    抽象不应该依赖细节,细节应该依赖抽象,也就是提倡的“面向接口编程,而不是面对实现编程”。也可以这样理解:高层模块不应该依赖底层模块,两个都应该抽象rmqki应该依赖细节,细节应该依赖抽象。

  3.4 里氏代换原则

    子类必须能够替换掉他们的父类型。也就是说,在软件开发过程中,子类替换掉父类,程序的功能行为没有变化。只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类才能真正被复用,而子类也可以在父类的增加新的行为。

4. 设计模式四个基本基本要素

  设计模式使人们可以更加简单方便地利用成功的设计和体系结构,将已证实的技术表述成设计模式也会使新加入的系统开发者更加容易理解其设计思路。设计模式的基本要素包括模式名称,问题,解决方案和效果。

  4.1 模式名称

    一个助记名称,用来描述设计模式。解决方案和效果。设计模式允许在较高的抽象层次上进行设计。基于一个模式词汇表,开发团队之间可以讨论模式并在编写文档时使用它们。模式名称可以帮助我们思考,便于团队成员交流设计思想及设计结果。找到合适的模式名称也是设计模式编目工作的难点之一。

  4.2 问题

    问题主要描述在何时使用设计模式。它解释了设计问题和问题存在的前因后果,特定的设计问题和怎样用对象表示算法等。通常情况下,模式必须满足的一系列先决条件是问题。

  4.3 解决方案

    解决方案描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合来解决这个问题。

  4.4 效果

     描述了模式效果及使用模式权衡的问题。尽管描述设计决策时,并不是总提到模式效果,但它们对于评价设计选择和理解使用模式的代价及优势具有重要意义。软件效果大多关注对时间和空间的衡量,它们也表述了语言和实现问题。因为利用是面向对象设计的要互之一,所以模式效果包括它对系统灵活性,扩充性或可移植性的影响,显示地列出这些效果对理解和评价这些模式很有帮助。

5 设计模式分类

  设计模式主要分为创建型模式,结构型模式,行为型模式。  

  5.1 创建性模式  

  5.1.1 Net设计模式实例之简单工厂模式(Simple Factory Pattern)

  简单工厂模式的优点是,工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。

     5.1.2 设计模式实例之抽象工厂模式(Abstract Factory Pattern) 

  抽象工厂模式,提供一个创建一系列相关或者相互依赖对象的接口,而无需制定他们的具体类。抽象工厂模式的典型应用就是使用抽象工厂+反射+配置文件实现数据访问层程序。  

    5.1.3 Net设计模式实例之单例模式( Singleton Pattern)

     单例模式,保证一个类只有一个实例,并提供一个访问它的全局访问点。单例模式因为Singleton封装它的唯一实例,它就可以严格地控制客户怎样访问它以及何时访问它。

    5.1.4 Net设计模式实例之建造者模式(Builder Pattern)

建造者模式(Builder Pattern),将一个复杂对象的构建与它的表示分离,使的同样的构建过程可以创建不同的表示。建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时适用的模式

   5.1.5 Net设计模式实例之原型模式( Prototype Pattern)

原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。Specify the kind of objects to create using a prototypical instance, and create new objects by copying this prototype

浅复制与深复制区别:

浅复制,被复制的所有变量都还有与原来对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。深复制,把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。

Net命名空间System提供了一个IConeable接口,此接口只有一个方法Clone(),只需要实现这个接口就可以实现原型模式(Prototype Pattern)了

 

posted @ 2010-07-23 16:10  Jasmines  阅读(229)  评论(0编辑  收藏  举报