设计模式概述

来源:互联网 发布:淘宝童装店铺简介 编辑:程序博客网 时间:2024/06/06 09:48

  • 目录
  • 一 为什么要学习设计模式
  • 二 设计模式是什么
    • 1 设计模式定义
    • 2 设计模式的4个要素
    • 3 设计模式分类
  • 三 怎么使用设计模式
    • 1 何时使用设计模式
    • 2 怎么使用设计模式
  • 参考书籍

转载请注明出处:http://blog.csdn.net/AndyStill/article/details/63931601

目录:

一. 为什么要学习设计模式?

  • 为什么要学习设计模式,也可以理解为学习设计模式的目的。

一方面是教你利用真实可靠的设计来组织代码的模板,简单的说就是从前辈们在代码设计中总结、抽象出来的优秀通用经验,主要为了增加程序的可维护,可复用,可扩展,灵活性。

另一方面有助于程序设计的标准化和提高系统开发进度,设计模式使人们可以更加简单方便的复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。

可维护,指的是代码可读性比较高,易于维护。
可复用,减少重复代码 ,可以跨平台、跨模块、同一模块中重复使用,没有坏代码的味道。
可扩展,遵循OCP原则,适应灵活多变的业务需求。


一个模式是解决特定问题的有效方法。一个设计模式不是一个库(能在你的项目中直接包含和使用的代码库)而是一个用来组织你的代码的模板(Java bean)。事实上,一个代码库和一个设计模式在应用上是有很多不同的。 比如,你从店铺里面买的一件衬衫是一个代码库,它的颜色,样式和大小都由设计师和厂商决定,但它满足了你的需求。然而,如果店里面没有什么衣服适合你,那你就能自己创建自己的衬衫(设计它的形状,选择布料,然后裁缝在一起)。但是如果你不是一个裁缝,你可能会发现自己很容易的去找一个合适的模式然后按着这个模式去设计自己的衬衫。使用一个模型,你可以在更少的时间内得到一个熟练设计的衬衫。

回到讨论软件上来,一个数据提取层或者一个CMS(content management
system)就是一个库——它是先前设计好而且已经编码好了的,如果它能准确的满足你的需要那它就是一个好的选择。但如果你正在读这本书《设计模式》,可能你会发现库存的(原有的)解决方案并不是总是对你有效。至今你知道什么是你所要的,而且你能够实现它,你仅仅需要一个模型来引导你。

最后一个想法:就象一个裁缝模型,一个设计本身而言是没有什么用处的。毕竟,你不可能穿一个服装模型——它仅仅是由很薄的纸拼凑起来的。类似的,一个软件设计模型也仅仅只是一个引导。它必须根据程序设计语言和你的应用程序的特点和要求而特别的设计。


二 设计模式是什么?

2.1 设计模式定义:

  • 模式:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次地重用那些已有的解决方案,无需再重复相同的工作。即模式是在特定环境中解决问题的一种方案

  • 设计模式:设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结

2.2 设计模式的4个要素:

所有的设计模式都有一些常用的特性:一个标识(a pattern name),一个问题陈述(a problem statement), 一个解决方案(a solution),效果(consequences).

1.模式名称(pattern name) : 描述模式的问题,解决方案和效果

一个设计模式的名称是重要的,因为他会让其他的程序员不用进行太深入的学习就能立刻理解你的代码的目的(至少通过这个标识程序员会很熟悉这个模式)。 没有这个模式名称,我们便无法和其他人交流设计思想和设计结果。

2.问题(problem) : 描述是用来说明这个模式的应用的领域

描述了应该在何时使用此模式。 他解释了设计问题和问题存在的前因后果,他可能描述了特定的设计问题,如怎么样用对象表示算法等。 也可能描述了导致不灵活设计的类或对象结构。有时候,问题部分会包括使用模式必须满足的一系列先决条件。

3.解决方案(solution) : 描述了这个模式的执行。

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

4.效果(consequences) : 描述了模式应用的效果及使用模式要权衡的问题。 尽管我们描述设计决策时,并不总是提到模式效果,但他们对于评价设计选择和理解使用模式的代价及好处具有重要意义。软件效果大多关注对时间和空间的衡量,他们也表述了语言和实现问题。因为复用是

2.3 设计模式分类:

  • 按照不同模式目的可分为以下三类:

1.创建型:抽象了实例化的过程,帮助一个系统独立于关联对象的创建、组合和表示方式。

1.封装创建逻辑,不是需要的时候直接new一个对象。2.封装创建逻辑的变化,业务变化的时候客户端代码尽量不修改,或者尽量少修改。

2.结构型:类和对象的结构,采用继承机制组合实现或接口(类结构型模式),或者组合一些对象实现新的功能(对象结构型模式)

3.行为型:关注的是对象的行为,用来解决对象之间的联系问题

  • 按照不同模式范围可分为类模式和对象模式两种:

1.类模式:处理类和子类之间的关系,这些关系通过继承建立,在编译时刻就被确定下来,是属于静态的。

2.对象模式:处理对象间的关系,这些关系在运行时刻变化,更具动态性

各模式对应分类如下表,模式作用此处不赘述,后续会逐个讲解:

范围/目的 创建型 结构型 行为型 类模式 工厂方法 (类)适配器模式 解释器模式、模板方法模式 对象模式 单例模式、简单工厂、抽象工厂、原型模式 (对象)适配器模式、代理模式、装饰模式、组合模式、桥梁模式、外观模式、享元模式 命令模式、责任链模式、策略模式、迭代器模式、中介者模式、观察者模式、备忘录模式、访问者模式、状态模式

三 怎么使用设计模式?

3.1 何时使用设计模式:

设计方案的时候:

编写代码之初,尽可能的考虑到以后的变化和更好的复用,来使用合适的设计模式来拥抱变化,方便扩展。

重构的时候:

当代码臃肿,业务逻辑混乱,以至于无法扩展或者成本很高的时候,通过设计模式来进行重构,你会体会到优雅干净的代码带来的好处

3.2 怎么使用设计模式:

考虑到通用的模式效果和你想要实现的目的,来进行匹配相应的设计模式或者组合不同的设计模式来定制想要的效果。

参考书籍:

1.大话设计模式

2.设计模式(java版)

3.设计模式系列博客

0 0
原创粉丝点击