设计模式小结~

设计模式

本文主要是对设计模式有一个初步的认识,以及设计模式的核心概念的一些总结。



在开始学习之前,会有相应的一些有关设计模式的疑问,主要是帮助自己学习的时候更加有目的性和更深入理解设计模式。

0、为什么有设计模式?

1、什么是设计模式?

2、设计模式有哪些?

3、设计模式的作用?

4、设计模式核心是什么?

一、设计模式概述

1、设计模式的意义

本质:面向对象设计原则的实际应用

对类的封装性继承性多态性以及类的关联关系和组合的正确理解。

2、设计模式的优点

提高程序员的思维能力、编程能力和设计能力。

使得程序设计更加标准化、代码编制更加工程化,是软件开发效率大大提高,从而缩短软件的开发周期。

使得设计的代码可重用性高、可读性强、可靠性高、灵活性好、可维护性强。

3、设计模式的关键基本要素

3-1. 模式名称

每一个模式都有自己的名字,通常用一两个词来描述,可以根据模式的问题、特点、解决方案、功能和效果来命名。模式名称(PatternName)有助于我们理解和记忆该模式,也方便我们来讨论自己的设计。

3-2. 问题

问题(Problem)描述了该模式的应用环境,即何时使用该模式。它解释了设计问题和问题存在的前因后果,以及必须满足的一系列先决条件。

3-3. 解决方案

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

3-4. 效果

描述了模式的应用效果以及使用该模式应该权衡的问题,即模式的优缺点。主要是对时间和空间的衡量,以及该模式对系统的灵活性、扩充性、可移植性的影响,也考虑其实现问题。显式地列出这些效果(Consequence)对理解和评价这些模式有很大的帮助。

4、设计模式的分类(GoF 23)

根据设计模式的一些职责进行简单的分类:

  • 创建型模式

(描述如何创建一个对象。将对象的创建和使用分离。)

单例模式、 工厂模式、 抽象工厂模式、 建造者模式、 原型模式

  • 结构型模式

(描述将类或者对象根据某种布局组成一个更大的结构。)

适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式

  • 行为型模式

(描述类或者对象之间如何相互协作,去共同完成单个对象无法完成的任务。)

模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式

5、OOP七大原则

  1. 开闭原则
  2. 里氏替换原则
  3. 依赖倒置原则
  4. 单一职责原则(单一功能原则)
  5. 接口隔离原则
  6. 迪米特法则(最少知识原则)
  7. 合成复用原则

1.【开闭原则】 对扩展开放,对修改关闭。(对原来的代码进行扩展时,尽量不去修改原来的代码。新的代码功能块尽量不去影响原来功能代码块的工作。)降低维护带来的风险。

2.【里氏替换原则】 继承必须确保超类所拥有的性质在子类中仍然成立。(子类可以扩展父类的功能,但是尽量不要更改父类原有的功能。子类可以替代父类使用。)防止继承泛滥。

3.【依赖倒置原则】 面向接口编程,不要面向实现编程。(高层的模块不应该依赖低层的模块,而是要依赖它的抽象接口。即抽象不依赖于细节、但是细节依赖于抽象。)更有利于代码结构的升级扩展。

4.【单一职责原则】 控制类的粒度大小、将对象解耦、提高其内聚性。(即一个方法尽可能完成一件事情,一个类或接口,职责单一。) 便于理解,提高代码的可读性。

5.【接口隔离原则】 为各个类建立它们需要的专用接口。(提高其内聚性)接口之间不可互相影响。功能解耦,高聚合、低耦合。

6.【迪米特法则】 只与你的直接朋友交谈,不跟“陌生人”说话。(A与B直接通信、B与C直接通信、A与C之间无直接通信时,A与C的交谈尽量通过B来转发实现交谈,而不是A与C直接交谈。)这样可以降低类之间的耦合性,提高模块之间的独立性。但会增加系统的复杂性。

7.【合成复用原则】 尽量使用组合或者聚合等关系来实现,其次才考虑使用继承关系来实现。(代理模式!明星和经纪人类的关系就是包含关系。)从而降低代码耦合。

(A类和B类之间,A类的对象是B类的成员变量【B has a A】,A是B的组成部分。然而继承的关系是【B is a A】)

(后续在进行更新ing…)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值