Giter Site home page Giter Site logo

designpattern's Introduction

设计模式代码

设计和模式

软件设计的核心是抽象,抽象贯穿整个软件设计过程,不同的职责站在不同的层次和角度进行抽象。而模式是对同类型问题的一种抽象和高度概括。

设计模式是应对需求频繁变化带来的负面影响,其中心**就是解耦,减少模块间的依赖,使各模块可以独立变化。解耦是目的,抽象是解耦的方式和手段。

设计模式原则

  • 单一职责原则 一个类仅有一个引起它变化的原因
  • 里氏替换原则 子类替换基类时,原有程序不用更改
  • 依赖倒置原则 抽象不应该依赖于细节,细节应当依赖于抽象(要针对接口编程,而不是针对实现编程)
  • 接口隔离原则 接口应该尽量小和单一
  • 开闭原则 对于扩展是开放的,对于修改是封闭的
  • 迪米特原则 一个对象应当尽可能少的去了解其他对象

原则是对具体设计模式的抽象(又见抽象),其实就是面向对象设计的日常原则。值得一提的是,无论设计模式还是原则,只是作为一个指导参考,不必非要死搬硬套,合理就好。

如何学习设计模式

学习技术,还是偏向于从全局到局部,再深入到细节,这样才不会迷失。

要理解设计模式,首先要理解抽象,再理解设计原则,然后结合项目经验找到软件设计的痛点,最后深入设计模式细节。

另外,设计模式是演变过来的,不是出生那天就固定了,所以了解模式的演变对理解设计模式更有意义。

学习设计模式需要的基础知识:

1. 熟悉面向对象的概念
2. 熟悉接口、泛化、多态、继承、组合等概念
3. 对抽象、依赖、解耦的概念有过独立思考
4. 对设计模式原则有所了解

具体学习方式:

1. 了解设计模式分类,每种分类解决什么类型的问题
2. 先学习基础的、简单的设计模式,再学习其他演变的模式
3. 将所有设计模式熔炉,抽象化、理论化

如何在项目中实战:

1. 寻找项目中的业务变化点
2. 思考如果对频繁变化点进行抽象封装
3. 对比自己的实现与经典设计模式有何差异

学习顺序(从简单到复杂):

1. 单例模式
2. 工厂方法、模板方法
3. 抽象工厂
4. 观察者
5. 代理
6. 中介者、原型
7. 状态、策略
8. 外观、享元
9. 适配器、迭代器
10. 组合、装饰
11. 命令、备忘录
12. 责任链、访问者
13. 生成器、桥接
14. 解释器

书籍推荐只有两本:Head First设计模式设计模式(GOF),其他书籍不看也罢,看了也许还会起误导作用。两本书的顺序是初学看Head First设计模式,如果有底子直接看设计模式(GOF)

目录

创建型设计模式

结构型设计模式

行为型设计模式

结尾

设计模式很不好讲,为了简化设计模式的理解,尽量将 demo 裁剪的简单直接。因此有的示例无法充分说明该设计模式的威力(以学习目的为主)。

另外一个头疼的问题是很难找到合适的示例,要么例子和设计模式不紧密,要么需要很多代码才能表述清楚。示例的选择大致来源三处:

	四人帮的设计模式示例
	head first 设计模式示例
	网上搜索

designpattern's People

Contributors

xuwening avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.