设计模式概述

设计模式概述

image-20230101161141283

为什么要学习设计模式?

建造狗窝和建造摩天大厦有什么区别?

image-20230101161247188

一个人用些基本工具,可以随心建造,修修补补。建造的不好可以推倒重来

image-20230101161317718

设计者们首先要考虑大厦的用途,然后让建筑设计师们拿出一套经得住考验的建筑图纸,紧接着去采购高质量的建筑原材料,聘请大量富有经验的建筑工人、运输司机、工地监工等 。根据设计图纸完成整座大楼的建设。

建造高质量软件和建造摩天大厦类似,需要优秀的设计

image-20230101161530181

低质量软件,难以扩展,用户数量有限,运行不稳定

image-20230101161552876

高质量软件,方便扩展,高并发,7*24小时正常运行

软件开发的实际情况

项目刚开始时,系统进行了初步分析设计,后面用户的需求不断发生变化,对系统不停修改,由于没有良好的设计。系统最终变成了谁都不愿意用的软件。

image-20230101161726843

image-20230101161729374

image-20230101161732723

  • 系统设计过于僵硬(加不进东西,会波及多个已有的模块)
  • 系统设计过于脆弱(修改一个地方,导致感觉没有关联的模块也发生故障)
  • 复用率低(代码可以用到其他地方,单代码依赖于其他东西,无法剥离,直接用了拷贝)

可复用性和可维护性是软件设计中最重要的能力,设计模式帮助我们提升这个能力

image-20230101162341257

课堂讨论

如果你为西南石油大学学开发一个图书管理系统用了一年的时间,现在要为西南科技大学开发一个类似的系统需要用多长时间?

从身边的用了10年以上的软件比如微信、qq等说明可维护性的对软件工程的重要性

老子,善为士者不武

image-20230101162822355

士-软件系统设计师

武-对软件系统的大规模修改

设计模式是软件开发中的内功心法

从1995年至今,无论是在大型API或框架(如JDK\net Frammework等)、轻量级框架(Struts、Spring、Hibernate、Junit)等,还是应用软件的开发中,设计模式都得到了广泛的应用

天下有道,却走以马以粪

天下无道,戎马生于效

天下太平,好的跑马却在田间耕作;当天下无道时,战马在战场上生出小驹

系统设计得好,软件维护不困难,代码高手无法发挥作用

软件设计低劣、维护性差,代码高手必须连续作战

设计模式产生的背景

模式的诞生与定义

  • 模式起源于建筑业而非软件业
  • 模式之父-美国加利福尼亚大学环境结构中心研究所所长
  • 253个建筑和城市规划模式
    • Context(模式适用的前提条件)
    • Theme或probelem(在特定条件下要解决的目标问题)
    • Solution(对目标问题求解过程中各种物理关系的记述)

image-20230101163418529

模式的诞生与定义
  • Alexander给出了关于模式的经典定义:每个模式都描述了一个在我们环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次地重用那些已有的解决方案,无需再重复相同的工作。
  • A patter is a solution to a problem in a context
  • 模式就是在特定环境解决问题的一种方案
软件模式
  • 1990年,软件工程界开始关注Alexander等在这一住宅、公共建筑与城市规划领域的重大突破
  • 四人组(GOF),他们在1994年归纳发表了23中在软件开发中使用频率较高的设计模式,旨在用模式来统一沟通面向对象方法在分析、设计和实现间的鸿沟

image-20230101163923847

image-20230101163942444

设计模式概念与意义

什么是模式?

从字面上理解,模,就是模型、模板的意思,式就是方式、方法的意思。综合起来,所谓模式就是可以作为模型或模板的方式或方法。再简单点说就是可以用来作为样板的方法或方式,类似于大家所熟悉的范例

image-20230101164130892

这两个建筑有什么相同的地方?身边还有没类似例子?

patter模式其实就是解决某一类问题的方法论。把解决某类问题的方法总结归纳到理论高度,那就是模式

模式是一种指导,在一个良好的指导下,有助于你完成任务,有助于你做出一个优良的设计方案,达到事半功倍的效果。

  • 中国传统建筑:阁、亭、桥
  • 中国武术:招术、套路
  • 书法:行书笔法、草书笔法、隶书笔法
  • 中国画:勾勒、点绘、破魔

image-20230101164418972

软件设计模式(design patter)是一套被反复使用、多数人知晓的经过分类编目的、代码设计经验的总结。是指在软件开发中,经过验证的,用于解决在特定环境下、重复出现的、特定问题的解决方案。

到药店买感冒药,这个感冒药就是设计模式的一个很好体现

  • 经过验证的:药品上市前,会有大量的验证和实验以保证药品的安全性
  • 特定环境下:这些药品是针对人的、不是针对其他动物的
  • 重复出现的:正是因为感冒会重复出现,研制药品才是有意义的

设计模式是解决方案,解决方案就是设计模式呢?image-20230101164714895

软件模式

软件模式就是与具体的应用领域无关,在模式发现过程中需要遵三大规律,即只有经过三个以上不同类型的系统的校验,一个解决方案才能从候选模式升格为模式

image-20230101164846134

设计模式产生的概念和意义

软件模式等同于一定条件下出现的问题的以及解法,软件模式的基础结构由4个部分构成:

  • 问题描述
  • 前提条件
  • 解法
  • 效果[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6fHW6ba8-1672564587390)(C:\Users\xiaozhao\AppData\Roaming\Typora\typora-user-images\image-20230101164948830.png)]

软件模式四要素

  • 模式名称:用一两个词来描述模式的问题、解决方案和效果
  • 问题:描述了应用该模式的场合、情形
  • 解决方案:解决问题的方法、步骤或途径
  • 效果:描述了模式应用的效果及使用模式应权衡的问题
23种设计模式

GOF设计模式的分类

  1. 根据目的准则分
    1. 创建型模式:是创建对象而不是直接实例化对象,使程序在判断给定情况下创建哪一个对象时更为灵活
    2. 结构型模式:怎样安排系统内的各个对象,使其分布合理、易于理解、管理和维护
    3. 行为型模式:定义系统内对象间的交互通信
  2. 根据作用范围分
    1. 类模式:处理类和子类之间的关系(静态)
    2. 对象模式:处理对象之间的关系,在运行时可以变化(动态)
范围创建型模式结构型模式行为型模式
类模式工厂方法模式适配器模式(类)解释器模式,模板方法模式
对象模式抽象工厂模式、建造者模式、原型模式、单例模式适配器模式(对象)桥接模式 组合模式 装饰模式 外观模式 享元模式 代理模式职责链模式 命令模式 迭代器模式 中介者模式 备忘录模式 观察者模式 装状态模式 策略模式 访问者模式
创建型模式
  • 抽象工厂模式(Abstract Factory)
  • 建造者模式
  • 工厂方法模式
  • 原型模式
  • 单例模式
结构型模式
  • 适配器模式(Adapter)
  • 桥接模式(Bridge)
  • 组合模式(Composite)
  • 装饰模式(Decorate)
  • 外观模式(Facade)
  • 享元模式(Flyweight)
  • 代理模式(Proxy)
行为型模式
  • 职责链模式(Chain of Responsibility)
  • 命令模式(Command)
  • 解释器模式(Interpreter)
  • 迭代器模式(Interator)
  • 中介者模式(Mediator)
  • 备忘录模式(Memento)
  • 观察者模式(Observer)
  • 状态模式(State)
  • 策略模式(Stragety)
  • 模板方法模式(Template Method)
  • 访问者模式(Vistor)

如何学习设计模式?

image-20230101171522395

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值