设计模式

设计模式

设计模式概述

  • 设计模式的概念
    • 城市建筑的模式:模式就是描述一个不断发生的问题和该问题的解决方案
    • 《设计模式:可复用面向对象软件的基础》将设计模式定义为:对被用来在特定场景下解决一般设计问题的类和互相通信的对象的描述。通俗地说,可以把设计模式理解为对某一类问题的通用解决方案
    • 在学习设计模式时需要注意以下两点:
      • (1)学习设计模式是一个方面,另一方面更要了解模式中的思想。设计模式本身是为了提高软件架构的质量,学习设计模式的目的也是为了提高架构设计的水平。虽然设计模式中描述的大多是面向对象的低层设计方案,但其中包含的却是软件设计的思想,同软件架构风格是一致的。例如MVC,既可以看做是一种设计模式也可以看做是一种架构风格。掌握这种设计思想是非常有意义的。
      • (2)设计模式虽然可以使设计变得更精妙,但滥用设计模式会适得其反。
  • 设计模式的组成
    • 至少包含四个方面
      • Pattern Name
      • Problem
      • Solution
      • Consequence
  • GoF设计模式

GoF的著作不仅第一次总结了设计中的常用模式,还在学术上建立了软件设计模式的地位因此人们习惯上将GoF提出的23个设计模式统称为GoF模式

    • Factory Method模式
    • Abstract Factory模式
    • Builder模式
    • ProtoType模式
    • Observer模式
    • Bridge模式
    • Proxy模式
    • Decorator模式
    • Adapter模式
    • Singleton 模式
    • State模式
    • Visitor模式
  • 其他设计模式
    • 在GoF之后,人们继续对设计模式进行发掘,总结出更多的设计模式。在J2EE应用领域,人们也对使用J2EE框架开发的应用程序总结出一些列的设计模式。因为这些设计模式时同J2EE技术紧密相关的,所有要使用一些J2EE技术术语

- Interceptin Filter

- Session Facade模式

  • 设计模式与软件架构
    • 软件架构更倾向于从整体和全局上描述软件的组成
    • 设计模式更侧重于类与类、对象与对象之间的关系。例如在逻辑视图中,可以使用多种设计模式来组织类与类之间的关系。因此,有很多人认为,设计模式和软件架构师面向不同层次问题的解决方案。
    • 同设计模式一样,软件架构也有一些固定的模式,通常称为架构风格。常见的架构风格有分层架构、客户端-服务器端架构、消息总线、面向服务的架构(SOA)等。
    • 软件架构风格同设计模式在某种含义上是一致的。设计模式和软件架构中蕴含的很多思想是一致的。无论是架构风格还是设计模式,人们在追求良好的设计的过程中,将一些常见解决方案总结、整理出来,形成固定的风格与模式。例如消息总线的架构风格同Obserer模式就有神似之处。因此,掌握设计模式对于软件架构设计有非常大的帮助
  • 设计模式分类
    • 设计模式是面向问题的,即每一种设计模式都是为了解决一种特定类型的问题。可分为三种:
      • 创建型
      • 结构型
      • 行为型

 

- GoF模式分类

 

  • 设计模式及其实现
    • Abstract Factory模式
      • 意图解决的问题
        • 在程序中创建一个对象似乎是不能再简单的事情,其实不然。在大型系统开发中存在以下问题:
          • 1)object new className 是最常见的创建对象方法,但这种方法造成类名的硬编码,需要根据不同的运行环境动态加载相同接口但实现不同的类实例,这样的创建方法就需要配合上复杂的判断,实例化为不同的对象。
          • 2)为了适用于不同的运行环境,经常使用抽象类定义接口,并在不同的运行环境中实现这个抽象类的子类。普通的创建方式必然造成代码同运行环境的强绑定,软件产品无法移植到其他的运行环境
            • 抽象工厂就是根据不同的配置或上下文环境加载具有相同接口的不同类实例

 

  • Decorate模式
    • 通过在原有类的基础上包装一层来解决功能扩展的问题
  • 门面模式(Facade/Session Facade模式)
    • 屏蔽子系统的细节,降低了客户程序使用这些子系统的复杂度,同时也降低了客户程序和子系统的耦合程度;很好地体现了封装的思想,它封装的是一个子系统的内部结构

 

  • 设计模式总结
    • 切记不能滥用设计模式,尤其在一些简单系统中。如果系统中的对象都用工厂模式创建、系统中的工具类都设计成Singleton、两个对象间的通信还要硬加上一层Mediator等都是不可取的,只能毫无价值地提高系统复杂度,反而不利于系统的理解与维护。除最初的设计外,重构也是一个很好的时机,系统架构设计师可以在重构的时候根据需要逐步应用设计模式改良系统,提高系统的可维护性和复用性

 

 

posted on 2020-10-21 09:48  endian11  阅读(65)  评论(0编辑  收藏  举报

导航