Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

设计模式简介 #1

Open
wlf1112 opened this issue Nov 9, 2022 · 0 comments
Open

设计模式简介 #1

wlf1112 opened this issue Nov 9, 2022 · 0 comments

Comments

@wlf1112
Copy link
Owner

wlf1112 commented Nov 9, 2022

设计模式

什么是设计模式

设计模式的概念最早出现于建筑学领域,建筑学家 Christopher Alexander 对设计模式的定义如下:

每个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次的使用该方案而不必做重复劳动。

从面向对象谈起

面向对象隐含了两种思维模型:

  • 底层思维:向下,如何把握机器底层,从微观理解对象构造

    • 语言构造
    • 编译转换(编译器在编译的过程中做了什么)
    • 内存模型
    • 运行时机制(比如JavaScript垃圾回收机制,管理内存)
  • 抽象思维:向上,如何将我们的周围世界抽象为程序代码

    • 面向对象
    • 组件封装
    • 设计模式
    • 架构模式

深入理解面向对象

  • 向下:深入理解三大面向对象机制

    • 封装,隐藏内部实现
    • 继承,复用现有代码
    • 多态,改写对象行为
  • 向上:深刻把握面向对象机制所带来的抽象意义,理解如何使用这些机制来表达现实世界,掌握什么是“好的面向对象设计”

软件设计固有的复杂性

软件大师 Grady Booch 在 Object-Oriented Analysis and Design with Applications 一书中提到:

建筑商从来不会去想给一栋已建好的100层高的楼房地下再新修一个小地下室——这样做花费极大且注定要失败。然而令人惊奇的是,软件系统的用户在要求作出类似改变时却不会仔细考虑,而且他们认为这只是需要简单编程的事。

软件设计复杂的根本原因

软件设计复杂的根本原因是变化:客户需求的变化、技术平台的变化、开发团队的变化、市场环境的变化。。。

如何解决复杂性

1. 分解(主要用于结构化编程)

人们面对复杂性有一个常见的做法:即分而治之,将大问题分解为多个小问题,将复杂问题分解为多个简单问题。

2. 抽象(主要用于面向对象编程)

更高层次来讲,人们处理复杂性有一个通用的技术,即抽象。由于不能掌握全部的复杂对象,我们选择忽视它的非本质细节而去处理泛化和理想化的对象模型。

软件设计的目标

软件设计的金科玉律:复用

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant