设计模式学习分享 ppt课件

合集下载

设计模式ppt

设计模式ppt

违反LSP的后果:有可能需要修d { public abstract void fly() { I’m flying; } }
public class penguin:bird { public override void fly() { I can’t fly; } }
辅助原则
任何变量都不应该持有一个指向具体类的引用。 任何类都不应该从具体类派生。 任何方法都不应该覆盖它的任何基类中已经实现了的方法。
4.3 设计模式的类型
在设计模式经典著作《GOF95》中,设计 模式从应用的角度被分为三个大的类型
创建型模式(Creational Pattern) 结构型模式(Structural Pattern) 行为型模式(Behavioral Pattern)
是一套被反复使用、多数人知晓的、经过分类编目的、 代码设计经验的总结。使用设计模式是为了可重用代码、 让代码更容易被他人理解、保证代码可靠性。
Developing software is hard Developing reusable software is even harder
4.1 设计模式的概念
4.2.1 开放封闭原则(OCP)
实现的主要原则:抽象,把系统的所有可能的行 为抽象成一个抽象底层 ;同时由于可以从抽象层 导出一个或多个新的具体类可改变系统的行为, 因此对于可变的部分,系统设计对扩展是开放的。 可变性封装原则(Encapsulation of Variation Principle, EVP ):对系统所有可能发生变化的 部分进行评估和分类,每一个可变的因素都单独 进行封装。 开闭原则很难被完全实现,只能在某些模块、某 种程度上、某个限度内符合OCP的要求,OCP具 有理想主义的色彩,是OOD的终极目标。

23种设计模式合集PPT学习课件

23种设计模式合集PPT学习课件

2020/3/3
27
单例模式设计会产生什么问题?
• 在多线程程序中,Singleton模式可能会出现一个问题。
• 假设对getInstance()方法的两个调用几乎同时发生,这种情况可能非常糟糕。此时会发 生什么? 1.第一个线程检查实例是否存在。因为实例不存在,该线程执行创建第一个实例的代码 部分。 2.然而,假设在实例化完成之前,另一个线程也来检查实例成员变量是否为null。因为 第一个线程还什么都没有创建,实例成员变量仍然等于null,所以第二个线程也执行了 创建一个对象的代码。 3.现在,两个线程都执行了Singleton对象的new操作,因此创建了两个重复的对象。
1、工厂方法模式
主讲:田旭园 程序:奚亮亮 ppt :叶良波 答问:陈才国
FACTORY METHOD—请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一 件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说"要一个汉堡", 具体要什么样的汉堡呢,让MM直接跟服务员说就行了。
感谢王良芳大神在校内的分享,
1页
新增20种模式的形象比喻。缺:
简单工厂模式、缺省适配模式
和不变模式。
创建模式:简单工厂、工厂方法、抽象工厂、单例、建造、模型; 结构模式:适配器、缺省适配、合成、装饰、代理、享元、门面、桥梁; 行为模式:不变、策略、模板方法、观察者、迭代子、责任链、命令
备忘录、状态、访问者、解释器、调停者。(最后三种不讲)
• 单例模式的要点 (1)某个类只能有一个实例; (2)它必须自行创建这个实例; (3)它必须自行向整个系统提供这个实例。
2020/3/3
26
单例模式的关键特征

设计模式概述ppt课件

设计模式概述ppt课件
4
引言
庞大的跨平台图像浏览系统
初始设计方案
Image {abstract}
BMPImage
JPGImage
GIFImage
PNGImage
BMPWindowsImp BMPLinuxImp BMPUnixImp
GIFWindowsImp GIFLinuxImp GIFUnixImp
JPGWindowsImp JPGLinuxImp JPGUnixImp
设计模式概述
1
大纲
引言 设计模式的诞生与发展 设计模式的定义与分类 GoF设计模式简介 设计模式的优点
2
引言
从三个实例说起……
• 实例一: 庞大的跨平台图像 浏览系统 • 实例二: 不够灵活的影院售 票系统 • 实例三: 重用第三方算法库 时面临的问题
3
引言
庞大的跨平台图像浏览系统
• 该系统在将来可能还要根据需要引入新的打折方式。
7
//电影票类
class MovieTicket
{
private double price; //电影票价格
引言 private string type; //电影票类型 …… //计算打折之后的票价
public double Calculate()
10
引言
重用第三方算法库时面临的问题
银行业 务问处题理系统
第三方算法库
• 如何在既不修改现有接口又不需要算法库源代码的基
础客上户端能类够实现第三方算法库的重用是该软件公司开发
人员必须面对的问如题。何兼容?
加密类
DataOperation
11
引言
如何 解决?
12

设计模式详解ppt课件

设计模式详解ppt课件
7
The Factory Pattern
Factory是最常见的设计模式之一,可帮 助我们组织创建对象的代码,通常用于以 下两种情况: 创建复杂的对象,并进行初始化。 根据不同的环境(输入参数),创建不
同用途的对象。一般这些对象都是实现 了相同的接口或继承于同一基类。
8
Factory模式的JDBC应用
设计模式详解
1
何谓设计模式
在面向对象程序设计(OOP)过程中, 我们经常会遇到很多重复出现的问题,总 结解决这些问题的成功经验和最佳实践便 形成了设计模式(Design Pattern)。
其核心思想是将可重用的解决方案总 结出来,并分门别类。从而指导设计,减 少代码重复和优化体系结构。
2
采用设计模式的益处
28
The Decorator Pattern
Decorator模式为我们提供了一种无需 创建派生类就能改变对象行为的方法。
OracleDataSource负责创建链接,由函数getConnection获取链接
9
Factory模式应用于DAO
XMLDB是XML数据库 访问接口,针对Oracle 和DB2分别提供了实现。 XMLDB_DAOFactory为 类工厂,根据输入的参 数dbtype,创建不同的 XMLDB实现类。
public abstract class Employee { public float getSalary() {...} public String getName() {...} public float getSalaries() {...} public abstract int getTypeCode();
实际上,EJB容器将所有资源(JMS Factory、EJB Home等)的Factory全绑定到了目录服务中,使用这些 Factory的时候都是由目录服务获取,因此目录服务是所有 资源Factory的ngleton Pattern

设计模式ppt

设计模式ppt

5.1.1 工厂模式的由来
在面向对象编程中, 很普遍的方法是用一个new操 作符产生一个对象实例,new操作符就是用来构造 对象实例的。但是在一些情况下, new操作符直接 生成对象会带来一些问题。 首先,要使用new运算符创建一个对象我们必须清 楚所要创建的对象的类信息,而这有时候并不现 实,譬如打开一个视频文件需要一个播放器对象, 但是用户可能不知道具体播放器叫什么名字,而 只需要系统分派给这个视频文件一个合适的播放 器,这种情况下用new运算符是不适宜的;
5.1.4 应用举例
//定义“抽象的”工厂角色 Interface IKFCFactory { KFCFood CreateFood(); } //定义“具体的”工厂角色—鸡腿子工厂 public class ChikenFactory: IKFCFactory { public KFCFood CreateFood() { return new Chicken(); } } //定义“具体的”工厂角色—鸡翅子工厂 public class WingsFactory: IKFCFactory { public KFCFood CreateFood() { return new Wings(); } }
课堂练习
//定义抽象的课程“产品”(Product角色) public abstract class Lectures { public abstract void produce(); }
t1角色—软件工程 //通过继承Lectures类,实现具体生产“软件工程”的方法 public class SoftwareEngineering: Lectures { public override void produce() { Console.WriteLine(―Wenxin Liang: Software Engineering‖) ; } } //ConcretProduct2角色—设计模式 //通过继承Lectures类,实现具体生产“设计模式”的方法 public class DesignPattern: Lectures { public override void produce() { Console.WriteLine(―Wenxin Liang: Design Pattern‖) ; } }

一份培训设计模式ppt

一份培训设计模式ppt

• • • •

小结
继承的好处:让共同部分,可以复用.避免重复编程. 继承的不好:耦合性高.一旦超类添加一个新方法,子类都 继承,拥有此方法,若子类相当部分不实现此方法,则要进 行大批量修改.继承时,子类就不可继承其它类了. 接口的好处:解决了继承耦合性高的问题.且可让实现类, 继承或实现其它类或接口. 接口的不好:不能真正实现代码的复用.
创建类型的模式
创建类型的模式如何有效地创建类的实例 单例模式(Singleton) 构建模式(Builder) 原型模式(Prototype) 简单工厂模式(Simple Factory) 抽象工厂模式(Abstract Factory) 工厂方法模式(Factory Method)
结构类型的模式
SingletonA single=SingletonA.getInstance();
简单工厂模式
概念:简单工厂模式是由一个工厂对象决定创建出哪一种 产品类的实例。 工厂(Creator)角色 :简单工厂模式的核心,它负责实 现创建所有实例的内部逻辑。工厂类可以被外界直接调用, 创建所需的产品对象。 抽象产品(Product)角色 :简单工厂模式所创建的所有 对象的父类,它负责描述所有实例所共有的公共接口。 具体产品(Concrete Product)角色:是简单工厂模式的 创建目标,所有创建的对象都是充当这个角色的某个具体 类的实例。
继承与接口
不管黑猫白猫,只要抓得到老鼠,都是好猫 猫:抓老鼠、叫、颜色各异 第一种方法:(一次性代码) 直接编写出各种猫的类,各类有三个方法: quack():叫 catch():抓老鼠 display():颜色 猫的共性:抓老鼠、叫、 猫的个性:颜色(黑白) 黑猫、白猫
运用继承

设计模式ppt演示课件(96页)

设计模式ppt演示课件(96页)

Abstract Factory 当一个对象状态发生变化时,所以依赖于它的对象都将得到通知并自动刷新
解决方案(solution)
解Int决erp方re案te(r solutio提n) 供一个创建一系列相关或相互依赖对象的接口, 而无需指定它们具体的类 增加一个新的子类(被访问对象),则需要更新所有Visitor类接口
The pattern is , in short , at the same time a thing , which happens in the world , and the rule which tells us how to create that thing , a process and a thing , both a description of a thing which is alive , and a description of the process which will generate that thing .
功能增加的时候破坏了原有类的定义
可以对Delete操作进行撤销;
Builder 能对大多数功能支持Undo和Redo操作
Compositor(支持不同格式化算法的代码)
2it3e种rat设or计_b模设式为(Fir结s将t 构)一个复杂对象的创建与它的表示分离,使得同样 的创建过程可以创建不同的表示 一个支持窗口的逻辑概念,另一个描述了窗口的不同实现
使一个类的实例化延迟到其子类
23种设计模式(创建)
Prototype
用原型实例指定创建对象的种类,并通过拷贝这个 原型来创建新的对象
Singleton
保证一个类仅有一个实例,并提供一个访问它的全 局访问点
23种设计模式(结构)

设计模式ppt

设计模式ppt

课堂练习
文档编辑器中的字符对象是使用Flyweight 模式的典型例子,请思考如何使用,并区 分出内部状态和外部状态分别是什么。请 写出使用Flyweight模式的优点。
课堂思考
每个网站的名称不同,该如何修改代码?
内部状态 在享元对象内部,不会随环境改变而改变 的共享部分—网站分类 外部状态 随环境改变而改变的,不可以共享的状态 --用户名称
享元模式执行时需要的状态可分为内部状 态和外部状态,内部状态存储于 ConcreteFlyweight对象之中,而外部对 象通常由客户端存储或计算。当客户端调 用Flyweight对象操作时,将外部状态传递 给它。
6.3.1 桥接模式的由来
由于手机都需要通讯录功能,需要在N品牌和M品 牌都增加通讯录功能,程序该如何编写?
6.3.1 桥接模式的由来
6.3.1 桥接模式的由来
需要在N品牌和M品牌都增加MP3音乐播放功能, 程序该如何编写?
6.3.1 桥接模式的由来
思考同样的问题
来了一家新的品牌S,也有游戏、通讯录和 MP3播放功能 还需要增加输入法功能、拍照功能,再增 加L品牌、X品牌,如何编写程序?
6.3.1 桥接模式的由来
假设有一个N品牌的手机,使用Android系统,它 有一个小游戏,客户想要玩游戏,程序该如何编 写?
6.3.1 桥接模式的由来
6.3.1 桥接模式的由来
假设又有一个M品牌的手机,使用iOS系统,也有 一个小游戏,客户端也可以调用,程序该如何编 写?
6.3.1 桥接模式的由来
6.3.1 桥接模式
待实现的系统可能有多角度分类,每一种分类都 有可能变化,那么就把这种多角度分离出来让他 们独立变化,减少他们之间的耦合

设计模式PPT

设计模式PPT

结构型模式
• Flyweight(享元)
结构型模式
• Proxy(追求者-代理-被追求者)
– 意图
• 为其他对象提供一种代理以控制对这个对象的访问。
– 适用性
• 1)远程代理(Remote Proxy)为一个对象在不同的地址空间 提供局部代表。 • 2)虚代理(Virtual Proxy)根据需要创建开销很大的对象。 • 3)保护代理(Protection Proxy)控制对原始对象的访问。 • 4)智能引用(Smart Reference)取代了简单的指针,它在 访问对象时执行一些附加操作。
行为模式
• Interpreter(自学)
– 意图
• 根据语言的文法,定义一个解释器,用来解释语言中的句 子。
– 适用性
• 当有一个语言需要解释执行,并且该语言中的句子可以表 示为一个抽象语法树时。 当满足以下情况时,解释器模式的效果最好:
– 文法简单。 – 效率不是一个关键问题。
行为模式
• Iterator(迭代器)
– 实现 • 使用一个原型管理器; • 实现克隆操作(浅拷贝和深拷贝); • 初始化克隆对象;
创建型模式
• Singleton(打印机)
– 意图
• 保证一个类仅有一个实例,并提供一个访问它的全局访问 点。
– 适用性
• 在一个系统要求一个类只有一个实例时才应当使用单例模 式
创建型模式
• Singleton
创建型模式
• Builder(建造小人)
– 意图
• 将一个复杂对象的构建与它的表示分离,使得同样的构建 过程可以创建不同的表示。
– 适用性
• 当创建复杂对象的算法应该独立于该对象的组成部分以及 它们的装配方式时。 • 当构造过程必须允许被构造的对象有不同的表示时。

设计模式教学PPT优选版

设计模式教学PPT优选版
怎样的设计才能面对需求的改变却可以保持相 对稳定,从而使得系统可以在第一个版本以后 不断推出新的版本。
面对需求,对程序的改动是通过增加新的 代码进行的,而不是更改现有代码。
例如第一章程序
关键
合理地抽象、分离出变化与不变化的部分, 为变化的部分预留下可扩展的方式。例如: 钩子方法或是动态组合对象等
常见面向对象设计原则
引言
设计原则是思想上的指导 设计模式是实现上的手段 设计模式是设计原则的具体体现 在实际开发中,很少做到完全遵守,总是
在有意无意的违反一些或者部分原则 设计是一种危险的平衡艺术
单一职责原则(SRP)
Single Responsibility Principle
拍摄UFO
耦合太紧密,Light发生变化将影响ToggleSwitch。
解决办法一:
将Light作成Abstract,然后具体类继承自 依赖倒置原则使细节和策略都依赖于抽象,抽象的稳定性决定了系统的稳定性。 Light。 ToggleSwitch依赖于抽象类Light,具有更高的稳定性,而BulbLight与TubeLight继承自Light,可以根据“开放-封闭”原则进行扩展。
如果你能够想到多于一个的动机去改变一 个类,那么这个类就具有多于一个的职责, 就应该考虑类的职责分离。
开放-封闭原则(OCP原则) Open-Closed Principle
开放-封闭原则
Open-Closed Principle原则讲的是:一 个软件实体应当对扩展开放,对修改关闭。
需要考虑:
象 要针对接口编程,不针对实现编程。
修电脑得到的启示
强内聚、松耦合
由于PC易插拨的方式,那么不管哪一个出问 题,都可以在不影响别的部件的前题下进行 修改或替换。”

软件设计模式ppt课件

软件设计模式ppt课件

*
* @author Administrator
*
*/
精选ppt
42
创建型模式之一(工厂方法模式)
package com.demo.factory;
import com.demo.factory.itf.ISwordFactory; import com.demo.factory.model.AbstractSword; import com.demo.factory.model.object.QixingSword;
实例二(多文档)
精选ppt
25
接口的作用
接口的定义方面来说,接口其实就是类和类之间的一种 协定,一种约束(安全性).
方便统一管理.另一个是方便调用
提高模块内的内聚性,降低模块间的耦合性.
扩展性
使用方便,可读性强,结构清晰的特点。
interface IBark { void Bark(); }
够有静态的不能被修改的数据成员(也就是必须 是static final的,不过在 interface中一般不定义 数据成员),所有的成员方法都是abstract的。
abstract class和interface所反映出的设计理念不
同。其实abstract class表示的是"is-a"关系,
精选ppt
精选ppt
3
设计模式的基本概念-软件危 机
软件危机的产生原因
✓ 与软件本身的特点有关。软件不同于硬件,它是计算机 系统中的逻辑部件而不是物理部件;软件不会因使用时 间过长而“老化”或“用坏”;在写出程序代码并在计 算机上试运行之前,软件开发过程的进展情况较难衡量, 软件质量也较难评价,因此管理和控制软件开发过程十 分困难;软件质量不是根据大量制造的相同实体的质量 来度量,而是与每一个组成部分的不同实体的质量紧密 相关,因此,在运行时所出现的软件错误几乎都是在开 发时期就存在而一直未被发现的,改正这类错误通常意 味着改正或修改原来的设计,这就在客观上使得软件维 护远比硬件维护困难;软件是一种信息产品,具有可延 展性,属于精柔选p性pt 生产,与通用性强的硬件相比,软件更 4

UML设计模式ppt课件

UML设计模式ppt课件
– 1995年,PLoP‘95 仍在伊利诺伊州的Allerton Park举行 ,“四人组” 出版了《设计模式:可复用面向对象软件的基础》(Design Pattern s: Elements of Reusable Object-Oriented Software)一书,本书 成为1995年最抢手的面向对象书籍,也成为设计模式的经典书籍。
前提条件
关联解法
解法
效果/优缺点/已知应 用
10
其他相关模式
设计模式的诞生与发展
• 软件模式
– 软件模式与具体的应用领域无关,在模式发现 过程中需要遵循大三律(Rule of Three),即只 有经过三个以上不同类型(或不同领域)的系 统的校验,一个解决方案才能从候选模式升格 为模式。
11
设计模式的诞生与发展
18
设计模式的定义与分类
• 设计模式的分类
– 根据范围,即模式主要是用于处理类之间关系 还是处理对象之间的关系,可分为类模式和对 象模式两种:
• 类模式处理类和子类之间的关系,这些关系通 过继承建立,在编译时刻就被确定下来,是属 于静态的。
• 对象模式处理对象间的关系,这些关系在运行 时刻变化,更具动态性。
23
设计模式的优点
• 设计模式是从许多优秀的软件系统中总结出的成功 的、能够实现可维护性复用的设计方案,使用这些方 案将避免我们做一些重复性的工作,而且可以设计出 高质量的软件系统。
• 设计模式的主要优点如下:
– 设计模式融合了众多专家的经验,并以一种标准的形 式供广大开发人员所用,它提供了一套通用的设计词 汇和一种通用的语言以方便开发人员之间沟通和交流, 使得设计方案更加通俗易懂。对于使用不同编程语言 的开发和设计人员可以通过设计模式来交流系统设计 方案,每一个模式都对应一个标准的解决方案,设计 模式可以降低开发人员理解系统的复杂度。

java设计模式ppt课件

java设计模式ppt课件

接口隔离原则
客户端不应该强制依赖于它 不使用的接口,一个类对另 一个类的依赖性应当是最小 的。
新兴的设计模式
策略模式
定义一系列的算法,并将每一个算法封 装起来,使它们可以互相替换,让算法
独立于使用它的客户。
装饰器模式
动态的给一个对象增加一些额外的职 责,就增加对象的功能来说,装饰器
模式相比生成子类更为灵活。
设计模式的重要性
总Байду номын сангаас词
设计模式有助于提高软件的可维护性、 可扩展性和可重用性。
VS
详细描述
设计模式的使用可以帮助开发者设计出更 加灵活、稳定和可维护的软件系统。通过 使用设计模式,开发者可以更好地组织和 管理代码,提高代码的可读性和可维护性 。同时,设计模式还可以提供一种标准的 、通用的解决方案,使得代码更加易于理 解和重用,提高软件的可扩展性和可重用 性。
实现方式
通过将构造函数私有化,并提供一个静态的公有 的方法来获取该类的唯一实例。
建造者模式
01 总结词
提供了一种构建对象的最佳方 式。
02
详细描述
建造者模式是一种创建型设计 模式,它提供了一种构建对象 的最佳方式。通过使用建造者 模式,可以将一个复杂对象的 构建过程分解成一系列简单的 步骤,使得构建过程更加清晰 和易于管理。
设计模式的分类
要点一
总结词
设计模式可以根据不同的角度进行分类,如创建型、结构 型和行为型等。
要点二
详细描述
根据不同的角度,设计模式可以分为多种类型。其中常见 的分类方式包括创建型、结构型和行为型。创建型设计模 式关注对象的创建和实例化过程,如工厂模式、单例模式 等;结构型设计模式关注对象之间的结构关系,如适配器 模式、装饰器模式等;行为型设计模式关注对象的行为和 交互方式,如策略模式、观察者模式等。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

设计模式概览
OOP概要 六大原则 创建型 结构型 行为型
23 种模式
创建型模式
工厂方法模式 抽象工厂模式 单例模式 建造者模式 原型模式
结构型模式
适配器模式 装饰器模式 代理模式 门面模式 桥接模式 组合模式 享元模式
行为型模式
策略模式 模板方法模式 观察者模式 迭代子模式 责任链模式 命令模式 备忘录模式 状态模式 访问者模式 中介者模式 解释器模式
实现(Realization)
『 类与接口之间的关系 』
OOP概要 六大原则 创建型 结构型 行为型
5 种关系
设计模式六大原则
OOP概要 六大原则 创建型 结构型 行为型
总原则:开闭原则(Open Close Principle)
『 对扩展开放,对修改关闭 』
6 大原则
为了使程序的扩展性好,易于维护和升级
OOP概要 六大原则 创建型 结构型 行为型
代理模式
Proxy Pattern
『 为其他对象提供一种代理以控制对 这个对象的访问 』
OOP概要 六大原则 创建型 结构型 行为型
门面模式
Facade Pattern
『 要求一个子系统的外部与其内部的通 信必须通过一个统一的对象进行。门面 模式提供一个高层的接口,使得子系统 更易于使用 』
OOP概要 六大原则 创建型 结构型 行为型
+ + +
策略模式
Strategy Pattern
『 定义一组算法,将每个算法都封装起 来,并且使它们之间可以互换 』
OOP概要 六大原则 创建型 结构型 行为型
找乔国老, 造舆论
谎报荆州危情, 找孙尚香断后,
给刘备收心
掩护刘备过江
状态模式
State Pattern
在程序需要进行拓展的时候,不能去修改原有代码,而是要扩展原有代码,实现一个热插拔效果
单一职责原则(Single Responsibility Principle) 里氏替换原则(Liskov Substitution Principle) 依赖倒转原则(Dependence Inversion Principle) 接口隔离原则(Interface Segregation Principle) 迪米特法则 (Demeter Principle) 合成复用原则(Composite Reuse Principle)
单一职责原则
Single Responsibility Principle
『 应该有且仅有一个原因引起类的变更 』
OOP概要 六大原则 创建型 结构型 行为型
类的复杂性降低 可读性提高 可维护性提高 变更风险低
里氏替换原则
Liskov Substitution Principle
OOP概要 六大原则 创建型 结构型 行为型
OOP概要 六大原则 创建型 结构型 行为型
访问者模式
Visitor Pattern
『 封装一些作用于某种数据结构中的各元 素的操作,它可以在不改变数据结构的前 提下定义作用于这些元素的新的操作 』
OOP概要 六大原则 创建型 结构型 行为型
中介者模式
Mediator Pattern
『 用一个中介对象封装一系列的对象 交互,中介者使各对象不需要显示地 相互作用,从而使其耦合松散,而且 可以独立地改变它们之间的交互 』
Command Pattern
『 将一个请求封装成一个对象,从而让你 使用不同的请求把客户端参数化,对请求 排队或者记录请求日志,可以提供命令的 撤销和恢复功能 』
OOP概要 六大原则 创建型 结构型 行为型
备忘录模式
Memento Pattern
『 在不破坏封装性的前提下,捕获一个对 象的内部状态,并在该对象之外保存这个 状态,这样以后就可将该对象恢复到原先 保存的状态 』
· 接口要尽量小 ·接口要高内聚 ·定制服务 ·接口设计是有限度的
迪米特法则
Demeter Principle
『 一个对象应该对其他对象有最少的了解 』
OOP概要 六大原则 创建型 结构型 行为型
只和朋友交流 朋友间也是有距离的 不是自己的就是自己的 谨慎使用Serializable(序列化)
合成复用原则
『 面向接口编程,依赖于抽象而不依赖于具体 』
高层模块不应该依赖底层模块,两者都应该依赖其抽象 抽象不应该依赖细节 细节应该依赖抽象
接口隔离原则
Interface Segregation Principle
OOP概要 六大原则 创建型 结构型 行为型
『 接口尽量细化,同时接口中的方法尽量少 』
客户端不应该依赖它不需要的接口 类间的依赖关系应该建立在最小的接口上
OOP概要 六大原则 创建型 结构型 行为型
责任链模式
Chain of Responsibility Pattern
『 使多个对象都有机会处理请求,从而避 免了请求的发送者和接受者之间的耦合关 系,并沿着这条链传递该请求,直到有对 象处理它为止 』
OOP概要 六大原则 创建型 结构型 行为型
命令模式
OOP概要 六大原则 创建型 结构型 行为型
OOP概要 六大原则 创建型 结构型 行为型
建造者模式
Builder Pattern
『将一个复杂对象的构建与它的表示 分离,使得同样的构建过程可创建不 同的表示』
OOP概要 六大原则 创建型 结构型 行为型
享元模式
Flyweight Pattern
『 使用共享对象可有效地支持大量的 细粒度的对象 』
单例模式
Singleton Pattern
『 确保某一个类只有一个实例,而且自 行实例化并向整个系统提供这个实例 』
OOP概要 六大原则 创建型 结构型 行为型
工厂方法模式
Factory Method Pattern
『 定义一个用于创建对象的接口,让 子类决定实例化哪一个类,使一个类的 实例化延迟到其子类 』
面向对象编程
Object-Oriented Programming
封装(Encapsulate)
『 隐藏对象的属性和实现细节,仅对外公开接口 』
继承(Inheritance)
『 继承是子类使用父类的方法 』
多态(Polymorphism)
『 接口的多种不同的实现方式即为多态 』
OOP概要 六大原则 创建型 结构型 行为型
Composite Reuse Principle
OOP概要 六大原则 创建型 结构型 行为型
『 尽量使用合成/聚合的方式,而不是使用继承 』
在面向对象设计中,可以通过两种方法在不同的环境中复用已有的设计和实现, 即通过组合/聚合关系或通过继承,但首先应该考虑使用组合/聚合,组合/聚合可 以使系统更加灵活,降低类与类之间的耦合度,一个类的变化对其他类造成的影 响相对较少;其次才考虑继承,在使用继承时,需要严格遵循里氏代换原则,有 效使用继承会有助于对问题的理解,降低复杂度,而滥用继承反而会增加系统构 建和维护的难度以及系统的复杂度,因此需要慎重使用继承以派生出多个具体产品类 一个抽象工厂类,可以派生出多个具体工厂类 每个具体工厂类可以创建多个具体产品类的实例
OOP概要 六大原则 创建型 结构型 行为型
原型模式
Prototype Pattern
『 用原型实例指定创建对象的种类, 并且通过拷贝这些原型创建新的对象 』
『 当对象的状态改变时,同时改变其行为 』
OOP概要 六大原则 创建型 结构型 行为型
模板方法模式
Template Method Pattern
『 定义一个操作中的算法的框架,而将 一些步骤延迟到子类中,使得子类可以 不改变一个算法的结构即可重定义该算 法的某些特定步骤 』
OOP概要 六大原则 创建型 结构型 行为型
设计模式
Design Patterns
面向对象编程
Object-Oriented Programming
对象(Object)
『 对问题领域中事物的抽象 』 ◆万物皆对象 ◆唯一 ◆属性行为 ◆状态 ◆属于某类
OOP概要 六大原则 创建型 结构型 行为型
基 本概念
类(Class)
『 一组具有相同属性和行为的对象的抽象 』
OOP概要 六大原则 创建型 结构型 行为型
适配器模式
Adapter Pattern
『 将一个类的接口变换成客户端所期待的 另一种接口,从而使原本因接口不匹配而 无法在一起工作的两个类能够在一起工作 』
OOP概要 六大原则 创建型 结构型 行为型
桥接模式
Bridge Pattern
『 将抽象和实现解耦,使得两者可以 独立地变化 』
问题领域(Program Domain)
『 软件系统所模拟的真实世界中的系统 』
接口(Interface)
『 系统对外提供的所有服务 』『 接口类型 』 描述能够提供哪些服务,不包含服务的实现细节
抽象(Abstract)
『 从特定角度出发,从已存在的一些事物中抽取所关注的特性,形成一个新的事物的思维过程 』 ◆从问题领域的事物到软件模型中对象的抽象 ◆从对象到类的抽象 ◆从子类到父类的抽象
3 大特征
面向对象编程
Object-Oriented Programming
关联(Association)
『 类之间的特定对应关系 』
依赖(Dependency)
『 类之间的调用关系 』
聚集(Aggregation)
『 整体与部分之间的关系 』
泛化(Generalization)
『 类之间的继承关系 』
『 所有引用基类的地方必须能透明地使用其子类的对象 』
子类必须完全实现父类的方法 子类可以有自己的个性 覆盖或实现父类的方法时输入参数可以被放大(子类输入参数的类型宽于父类) 覆写或实现父类的方法时输出结果可以被缩小
相关文档
最新文档