设计模式期末考试复习
设计模式期末考试题及答案

设计模式期末考试题及答案# 设计模式期末考试题及答案一、选择题(每题2分,共20分)1. 下列哪个不是设计模式的分类?A. 创建型模式B. 结构型模式C. 行为型模式D. 功能型模式答案:D2. 单例模式属于哪种类型的设计模式?A. 创建型模式B. 结构型模式C. 行为型模式D. 并发型模式答案:A3. 装饰者模式主要用于解决什么问题?A. 对类的功能进行扩展B. 将对象组合成树形结构C. 将一个类的对象包装成另一个新类的对象D. 将类接口的实现部分委托给其他对象答案:A4. 观察者模式中,当被观察对象状态发生变化时,它将通知所有的什么?A. 观察者B. 参与者C. 订阅者D. 监听者答案:A5. 策略模式的意图是?A. 定义一系列的算法,把它们一个个封装起来,并使它们可互换B. 确保一个对象的引用在多个线程间是安全的C. 允许用户对某个对象的内部状态进行访问,而不允许修改D. 允许多个客户端通过一个共同的接口与一个对象交互,而这个对象却能在运行时切换其行为答案:A...(此处省略其他选择题)二、简答题(每题10分,共30分)1. 解释什么是工厂方法模式,并给出一个实际应用的例子。
答案:工厂方法模式是一种创建型设计模式,它定义了一个创建对象的接口,但让子类决定实例化哪一个类。
工厂方法让类的实例化推迟到子类中进行。
例如,在图形界面编程中,一个工厂类可以负责创建不同类型的按钮,如按钮工厂方法可以返回一个“圆形按钮”或“方形按钮”的实例。
2. 描述适配器模式的工作原理,并解释它在软件开发中的应用。
答案:适配器模式是一种结构型模式,它允许不兼容的接口之间进行通信。
它通过一个适配器类将一个类的接口转换成客户端期望的另一个接口。
在软件开发中,适配器模式常用于实现第三方库或遗留系统的接口,使得它们能够与现有的系统兼容。
3. 解释观察者模式的工作原理,并举例说明其在实际开发中的应用。
答案:观察者模式是一种行为型模式,它定义了对象间的一种一对多的依赖关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。
设计模式复习重点(仅供参考)

复习重点1.莫勇腾《深入浅出设计模式》书后习题所有选择题,问答题16,18,20,21,222.什么是设计模式?简述设计模式的作用设计模式是一种问题的解决思路,它已经适用于一个时间环境,并且可以使用语其他环境。
通常是对于某一类软件设计问题的可重用的解决方案,将其引入软件设计和开发过程,可充分利用己有的软件开发经验设计优秀的软件。
作用a重用设计,重用设计比重用代码更有意义,它会自动带来代码重用;b为设计提供共同的词汇,没个模式就是一个设计词汇,其概念使得程序员间的交流更加方便;c在开发文档中采用模式词汇可以让其他人更容易理解你的想法,变邪恶开发文档就更容易;d应用设计模式可以让重构系统变容易,降低在设计或实现中出现错误的可能性;e可以节省大量时间。
3.设计模根据目的准则分类(课本27章)1,创建型:创建型比较容易理解。
与对象的创建有关。
如Factory,Builder2,结构型:处理类或对象的组合。
如Adapter,Facade,Proxy等3,行为型:对类或对象怎么交互和怎么分配职责进行描述。
如Strategy,Command4.适配器模式的主要功能和分类在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。
一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。
对象适配器模式 - 在这种适配器模式中,适配器容纳一个它我包裹的类的实例。
在这种情况下,适配器调用被包裹对象的物理实体。
类适配器模式 - 这种适配器模式下,适配器继承自已实现的类(一般多重继承)。
5.单例模式实例(要写代码,要明白各种同步方法的区别,最好参考课件)Class Singleton{private static Singleton instance;//注意采用Privateprivate Singleton(){ }public static Singleton getInstance(){if (instance == null) //1Instance = new Singleton(); //2return instance; //3}}public synchronized static Singleton getInstance(){if (instance == null) //1Instance = new Singleton();//2return instance; //3}public static Singleton getInstance(){synchronized (Singleton.class){if (instance == null)Instance = new Singleton();}return instance;}public static Singleton getInstance(){if (instance == null){synchronized (Singleton.class){if (instance == null)instance = new Singleton();}}return instance;}6.浅克隆和深克隆的概念及原型模式含义(含序列化必须的Serializable接口)浅克隆的对象变量都含有和原来对象相同的值(这里变量指基本类型的变量,String类也算),但那些引用其他对象的变量任然指向原来的对象。
《JAVA设计模式》期末考试复习资料【范本模板】

《JAVA设计模式》复习资料一、单项选择题1.设计模式起源于()A、机械设计B、建筑工程设计C、水利工程设计D、工业电力化设计2.“不要和陌生人说话”是()原则的通俗表述。
A、接口隔离B、里氏替换C、依赖倒置D、迪米特3.目前常见的设计模式主要有()种。
A、23B、21C、32D、284.以下关于单一职责原则的叙述不正确的是()。
A、单一职责原则的英文名称是Single Responsibility Principle。
B、单一职责原则要求一个类只有一个职责C、单一职责原则有利于对象的稳定,降低类的复杂性D、单一职责原则提高了类之间的耦合性5.以下关于依赖倒置原则的叙述不正确的是()A、依赖倒置原则的简称是DIPB、高层模块不依赖于低层模块,低层模块依赖于高层模块C、依赖倒置原则中高层模块和低层模块都依赖于抽象D、依赖倒置原则实现模块间的松耦合6.下面关于单例模式说法错误的是()A、单例模式是指一个类只有一个实例B、单例类从实现方式上分为懒汉式和饿汉式C、单例类从功能上分为状态单例类和无状态单例类D、可以通过继承的方式对单例类进行扩展得到功能更丰富的单例类7.下面关于工厂方法模式说法错误的是().A、工厂方法模式使一个类是实例化延迟到其子类中B、工厂方法模式中具有抽象工厂、具体工厂、抽象产品和具体产品4个角色C、工厂方法模式可以处理多个产品的多个等级结构D、工厂方法模式可以屏蔽产品类8.在以下情况不适合使用责任职责链模式()A、有多个对象可以处理请求,哪个对象处理该请求在运行时刻自动确定。
B、在需要用比较通用和复杂的对象指针代替简单的指针的时候。
C、你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
D、一个请求需要一系列的处理工作。
9.当我们想创建一个具体的对象而又不希望指定具体的类时,可以使用()模式A、结构型B、创建型C、行为型D、以上都可以10.以下用来描述适配器模式的是( )A、表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
设计模式复习题

(1)以下是模式的基本要素的是。
ABCDA)名称B)意图C)解决方案D)参与者和协作者(2)常用的描述设计模式的格式有。
ABCDA)意图B)动机C)适用性D)结构(3)以下哪些问题通过应用设计模式能够解决。
ADA)指定对象的接口B)排除软件BUG C)确定软件的功能都正确实现D)设计应支持变化(4)面向对象系统中功能复用的最常用技术是。
ABA)类继承B)对象组合C)使用抽象类D)使用实现类(5)以下属于行为对象模式的是。
ABCDA)模板(Template Method)模式B)迭代器(Iterator)模式C)命令(Command)模式D)观察者(Observer)模式(6)以下属于创建型模式的是。
ACA)抽象工厂(Abstract Factory)模式B)合成(Composite)模式C)单例(Singleton)模式D)桥接(Bridge)模式(7)在不破坏类封装性的基础上,使得类可以同不曾估计到的系统进行交互。
主要体现在。
ADA)适配器(Adapte)模式B)合成(Composite)模式C)原型(Prototype)模式D)桥接(Bridge)模式(8)单例模式中,两个基本要点( a b )和单子类自己提供单例A .构造函数私有 B.唯一实例C.静态工厂方法D.以上都不对(9)常用的基本设计模式可分为。
AA)创建型、结构型和行为型B)对象型、结构型和行为型C)过程型、结构型和行为型D)抽象型、接口型和实现型(10)以下关于创建型模式说法正确的是。
AA)创建型模式关注的是对象的创建B)创建型模式关注的是功能的实现C)创建型模式关注的是组织类和对象的常用方法D)创建型模式关注的是对象间的协作(11)封装分布于多个类之间的行为的模式是。
CA)观察者(Observer)模式B)迭代器(Iterator)模式C)访问者(Visitor)模式D)策略(Strategy)模式(12)Observer(观察者)模式适用于。
设计模式复习期末整理资料.docx

试卷1 •软件缺陷的等级A类——严重错误:1由于程序所引起的死机,非法退出。
2死循坏。
3数据库发生死锁4 因错课操作导致的程序屮断。
5功能错课。
6与数据库连接错误。
7数据通讯错谋B类——较严重错误:1程序错误2程序接口错误3数据库的表、业务规则、缺省值未加完整性等约束条件C类----- 般性错误:1操作界面错误2打印内容、格式错误3简单输入限制未放在前台进行控制4删除操作未给出提示5数据库表中有过多的空白D类——较小错课:1界面不规范2辅助说明描述不清楚3输入输岀不规范4长操作未给用户提示5提示窗口未采用行业术语6可输入区域和只读区域没有明显的区分标志 2.IEEE/EIA Std 12207软件生命周期过程:(1)主要过程:获取过程、供应过程、开发过程、运行过程(2)支持过程:文档编制过程、配置管理过程、质量保证过程、验证过程、确认过程、联合评审过程、审核过程、问题解决过程3.RUP的软件测试提出了三大成功经验:(1)尽早测试:通过迭代式软件开发把原来的整个软件开发生命周期分成多个迭代周期,在每个迭代周期都进行测试(2)连续测试:在迭代式软件开发的每个迭代周期,都会进行软件测试活动。
①过程:将整个项目的开发目标划分成一些更易于完成和达到的阶段小目标;制定迭代计划, 而R 每个迭代中都包括需求、设计、编码、集成、测试等一系列的开发活动,都会增量式集成一些新的系统功能;通过每次迭代,我们都产生一个可运行的系统。
在迭代式软件开发的每个迭代周期,都会进行软件测试活动。
②意义:持续的提高软件质量、监控质量状态,使系统测试的尽早实现成为可能。
从而有效的控制开发风险、降低测试成木,切实保证项目进度。
(3)自动化测试:完善的测试流程是前提,自动化测试工具是保证。
4•如何有效控制测试用例的流程? /有效编写测试用例应遵循的原则(1)从覆盖率來说,测试用例库的用例要达到最大覆盖软件系统的功能点(2)从数量来讲,测试用例不能太少,必须能覆盖系统需求(3)测试用例的完成不是一劳永逸的,一旦测试需求发生变化,则测试用例必须重新维护。
设计模式复习题

三、题目预测填空题:1.请从外观、组合、工厂方法、模板方法、观察者、单件、抽象工厂、命令、迭代器、代理、适配器模式中选择7种填入下列的空缺中。
P6101) 工厂方法模式中,父类负责定义创建对象的公共接口,子类决定要创建的具体类是哪一个。
2) 抽象工厂模式提供一系列相关或相互依赖对象的接口而无需指定它们具体的类。
3) 单件模式确保某一个类仅有一个实例,并自行实例化并向整个系统提供这个实例。
4) 组合模式将对象组合成树形结构以表示“部分-整体”的层次结构。
使得用户对单个对象和组合对象的使用具有一致性。
5) 外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用,为子系统中的一组接口提供一个一致的界面,简化了一群类的接口。
6) 观察者模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新,也就是让对象能在状态改变时被通知。
7) 模板模MVC模型式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
8) 迭代器模式在对象的集合之中游走,而不暴露集合的实现。
9) 代理模式包装对象,以控制对比对象的访问。
10) 适配器模式封装对象,并提供不同的接口。
2.工厂模式分为(简单工厂),(工厂方法),(抽象工厂)三种类型。
3.适配器模式,分为类的适配器和对象的适配器两种实现。
其中类的适配器采用的是(继承)关系,而对象适配器采用的是(组合聚合)关系。
4.设计模式的基本要素有(名字),(意图),(问题),(解决方案),(参与者与协作者),(实现),(一般性结构)。
5.MVC模型的基本工作原理是基于(观察者)模式,实现是基于(命令)模式6.面向对象的六条基本原则包括:开闭原则,里式代换原则,合成聚合原则以及(依赖倒转),(迪米特法则)(接口隔离)。
7.当我们想用不同的请求对客户进行参数化时,可以使用(命令)模式。
8.当我们想封装不同算法并使它们可相互替换时,可以使用(策略)模式。
设计模式总复习题

总复习题复习参考资料:1.GoF 设计模式2.设计模式解析3.易学设计模式4.大话设计模式5.深入浅出设计模式以参考资料为主,模拟试题1—5中有些题答案在一些附加资料中模拟试题1一、选择题(分值20)1。
设计模式一般用来解决什么样的问题()A。
同一问题的不同表相 B不同问题的同一表相C.不同问题的不同表相D.以上都不是2. 下列属于面向对象基本原则的是( )A。
继承 B.封装 C.里氏代换 D都不是3. Open—Close原则的含义是一个软件实体( )A。
应当对扩展开放,对修改关闭。
B.应当对修改开放,对扩展关闭C。
应当对继承开放,对修改关闭D.以上都不对4。
当我们想创建一个具体的对象而又不希望指定具体的类时,可以使用()模式. A.创建型 B。
结构型 C行为型 D。
以上都可以5。
要依赖于抽象,不要依赖于具体。
即针对接口编程,不要针对实现编程,是( )的表述A. 开—闭原则B. 接口隔离原则C。
里氏代换原则D。
依赖倒转原则6。
依据设计模式思想,程序开发中应优先使用的是()关系实现复用。
A,委派 B.继承 C创建 D。
以上都不对7。
设计模式的两大主题是( )A.系统的维护与开发 B 对象组合与类的继承C。
系统架构与系统开发 D。
系统复用与系统扩展8. 单体模式中,两个基本要点( )和单体类自己提供单例A .构造函数私有 B.唯一实例C.静态工厂方法D.以上都不对9. 下列模式中,属于行为模式的是( )A.工厂模式 B观察者 C适配器以上都是10。
“不要和陌生人说话”是( )原则的通俗表述A.接口隔离 B。
里氏代换 C.依赖倒转 D。
迪米特二、填空题(分值20)1. 软件体系结构是指一个系统的有目的的设计和规划,这个设计规划既不描述 ,也不描述,它只描述系统的及其相互的。
2.一个UML模型只描述了一个系统,它并没告诉我们系统是 .3.接口是可以在整个模型中反复使用的一组行为,是一个没有而只有的类。
《JAVA设计模式》期末考试复习资料

《JAVA设计模式》复习资料一、单项选择题1.设计模式起源于()A、机械设计B、建筑工程设计C、水利工程设计D、工业电力化设计2.“不要和陌生人说话”是()原则的通俗表述。
A、接口隔离B、里氏替换C、依赖倒置D、迪米特3.目前常见的设计模式主要有()种。
A、23B、21C、32D、284.以下关于单一职责原则的叙述不正确的是()。
A、单一职责原则的英文名称是Single Responsibility Principle.B、单一职责原则要求一个类只有一个职责C、单一职责原则有利于对象的稳定,降低类的复杂性D、单一职责原则提高了类之间的耦合性5.以下关于依赖倒置原则的叙述不正确的是()A、依赖倒置原则的简称是DIPB、高层模块不依赖于低层模块,低层模块依赖于高层模块C、依赖倒置原则中高层模块和低层模块都依赖于抽象D、依赖倒置原则实现模块间的松耦合6.下面关于单例模式说法错误的是()A、单例模式是指一个类只有一个实例B、单例类从实现方式上分为懒汉式和饿汉式C、单例类从功能上分为状态单例类和无状态单例类D、可以通过继承的方式对单例类进行扩展得到功能更丰富的单例类7.下面关于工厂方法模式说法错误的是()。
A、工厂方法模式使一个类是实例化延迟到其子类中B、工厂方法模式中具有抽象工厂、具体工厂、抽象产品和具体产品4个角色C、工厂方法模式可以处理多个产品的多个等级结构D、工厂方法模式可以屏蔽产品类8.在以下情况不适合使用责任职责链模式()A、有多个对象可以处理请求,哪个对象处理该请求在运行时刻自动确定。
B、在需要用比较通用和复杂的对象指针代替简单的指针的时候。
C、你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
D、一个请求需要一系列的处理工作。
9.当我们想创建一个具体的对象而又不希望指定具体的类时,可以使用()模式A、结构型B、创建型C、行为型D、以上都可以10.以下用来描述适配器模式的是()A、表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一What is design pattern ?模式是在物体或事件上,产生的一种规律变化与自我重复的样式与过程。
在模式之中,某些固定的元素不断以可预测的方式周期性重现。
What is design pattern ?广义讲,软件设计模式是可解决一类软件问题并能重复使用的软件设计方案;狭义讲,设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。
是在类和对象的层次描述的可重复使用的软件设计问题的解决方案;[面向对象]设计模式体现的是程序整体的构思,所以有时候它也会出现在分析或者是概要设计阶段设计模式的核心思想是通过增加抽象层,把变化部分从那些不变部分里分离出来GOF(Gang of Four)的设计模式定义:设计模式是在一个上下文中,对一个问题的解决方案,及其能够达到的效果。
即模式的四要素:名称、上下文与问题、解决方案、效果。
分类:23种设计模式:创建型:5种结构型:7种行为型:11种四要素:1.模式名称(Pattern Name)2.问题(Problem):描述应该在何时使用模式。
解释了设计问题和问题存在的前因后果,可能还描述模式必须满足的先决条件;3.解决方案(Solution):描述了设计的组成成分、相互关系及各自的职责和协作方式。
模式就像一个模板,可应用于多种场合,所以解决方案并不描述一个具体的设计或实现,而是提供设计问题的抽象描述和解决问题所采用的元素组合(类和对象);4.效果(consequences ):描述模式的应用效果及使用模式应权衡的问题都有哪些设计模式?GOF共提出23种设计模式:创建型:5种结构型:7种行为型:11种Creational Patterns用来创建对象的模式,抽象了实例化过程1.Factory Method [ 工厂模式]父类负责定义创建对象的公共接口,而子类则负责生成具体对象,将类的实例化操作延迟到子类中完成;2.Abstract Factory [ 抽象工厂模式]为一个产品族提供统一的创建接口。
当需要这个产品族的某一系列的时候,可以从抽象工厂中选出相应的系列创建一个具体的工厂类;3.Singleton [ 单例模式]保证一个类有且仅有一个实例,提供一个全局访问点;4.Builder [ 建造者模式]将复杂对象创建与表示分离,同样的创建过程可创建不同的表示。
允许用户通过指定复杂对象类型和内容来创建对象,用户不需要知道对象内部的具体构建细节;5.Prototype [ 原型模式]通过“复制”一个已经存在的实例来返回新的实例(不新建实例)。
被复制的实例就是“原型”,这个原型是可定制的。
原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效;或者创建值相等,只是命名不一样的同类数据;Structural Patterns结构型模式讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象来实现新的功能(对象结构型模式)1.Adapter [适配器模式]将一个类的接口适配成用户所期待的接口。
一个适配器允许因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包装在一个已存在的类中;2.Bridge [桥接模式]桥接模式的用意是将问题的抽象和实现分离开来实现,通过用聚合代替继承来解决子类爆炸性增长的问题;posite [ 组合模式]定义一个接口,使之用于单一对象,也可以应用于多个单一对象组成的对象组;4.Decorator [ 装饰模式]给对象动态添加额外的职责,就好像给一个物体加上装饰物,完善其功能;5.Façade [ 外观模式]外观模式为子系统提供了一个更高层次、更简单的接口,从而降低了子系统的复杂度,使子系统更易于使用和管理。
外观承担了子系统中类交互的责任6.Flyweight [ 享元模式]Flyweight是一个共享对象,它可以同时在不同上下文(Context)使用;7.Proxy [ 代理模式]在软件系统中,有些对象有时候由于跨越网络或者其他障碍,而不能够或者不想直接访问另一个对象,直接访问会给系统带来不必要的复杂性,这时候可以在客户程序和目标对象之间增加一层中间层,让代理对象来代替目标对象打点一切,这就是代理(Proxy)模式;Behavioral Patterns着力解决的是类实体之间的通讯关系,希望以面向对象的方式描述一个控制流程。
1.Chain of Responsibility [ 责任链模式]很多对象由每一个对象对其下一个对象的引用而连接起来形成一条链。
请求在这个链上传递,直到链上的某一个对象决定处理此请求。
发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使系统可以在不影响客户端的情况下动态的重新组织链和分配责任;mand [ 命令模式]将请求及其参数封装成一个对象,作为命令发起者和接收者的中介,可以对这些请求排队或记录请求日志,以及支持可撤销操作;3.Interpreter [ 解释器模式]给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子;4.Iterator [ 迭代器模式]提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示;5.Mediator [ 中介者模式]用一个中介对象来封装一系列的对象交互;6.Memento [ 备忘录模式]在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
这样以后就可将该对象恢复到原先保存的状态;7.Observer [ 观察者模式]定义了对象之间一对多的依赖,当这个对象的状态发生改变的时候,多个对象会接受到通知,有机会做出反馈;8.State [ 状态模式]允许一个“对象”在其内部状态改变的时候改变其行为,即不同的状态,不同的行为9.Strategy [ 策略模式]定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。
策略模式使这些算法在客户端调用它们的时候能够互不影响地变化;10.Template [ 模板模式]定义了一个算法步骤,并允许子类为一个或多个步骤提供实现。
子类在不改变算法架构的情况下,可重新定义算法中某些步骤;11.Visitor [ 访问者模式]表示一个作用于某对象结构中的各元素的操作。
可以在不改变各元素的类的前提下定义作用于这些元素的新操作;面向对象方法抽象(Abstraction)封装(Encapsulation)多态(Polymorphism)继承(Inheritance)Object-Oriented Method类的功能要单一,体现了抽象加强内聚,松散耦合好的封装性类的粒度要合理实现类不能依赖使用类应考虑灵活性,也就是可配置,可维护要考虑性能,可伸缩性要考虑后续的变化,也就是可扩展性要考虑合理的复用,这是平衡的艺术要合理的考虑接口和抽象类的使用尽量减少类间的交互次数和交互的信息量访问对象必须通过接口,不能绕过接口直接访问OO design principles开闭原则(OCP)单一职责原则(SRP)里氏替换原则(LSP)依赖倒置原则(DIP)接口隔离原则(ISP)迪米特原则(LoD)单一职责原则(Single Responsibility Principle, SRP)定义:就一个类而言,应该仅有一个引起它变化的原因;每一个引起类变化的原因就是一个职责,当类具有多职责时,应把多余职责分离出去,分别创建一些类来完成每一个职责;每一个职责都是一个变化的轴线,当需求变化时会反映为类的职责的变化;里氏替换原则(Liskov Substitution Principle, LSP)定义:所有引用基类的地方必须能透明地使用其子类的对象里氏替换原则是继承复用的基石,只有当派生类可以替换掉其基类,而软件功能不受影响时,基类才能真正被复用,派生类也才能够在基类的基础上增加新的行为LSP本质:在同一个继承体系中的对象应该有共同的行为特征里氏替换原则包含了两层重要含义:子类必须完全的实现父类的方法;子类可以有自己的个性依赖倒置原则(Dependence Inversion Principle, DIP)定义:高层模块不应依赖低层模块,二者都应该依赖于抽象高层模块只应该包含重要的业务模型和策略选择,低层模块则是不同业务和策略的实现;高层抽象不依赖高层和低层模块的具体实现,最多只依赖于低层的抽象;低层抽象和实现也只依赖于高层抽象;辅助原则任何变量都不应该持有一个指向具体类的引用;任何类都不应该从具体类派生;任何方法都不应覆盖其任何基类中已经实现了的方法;DIP引例—驾驶汽车依赖倒置原则(DIP)另一种理解:客户类和服务类都应该依赖于抽象(接口),并且客户类拥有接口。
依赖是有方向的,客户类依赖于服务类。
DIP引例—驾驶汽车DIP引例—驾驶汽车接口隔离原则(Interface Separate Principle, ISP)定义:类间的依赖关系应该建立在最小的接口上。
多个和客户相关的接口要好于一个通用接口;如果一个类有几个使用者,与其让这个类载入所有使用者需要使用的所有方法,还不如为每个使用者创建一个特定接口,并让该类分别实现这些接口;ISP引例—星探查询ISP引例—星探查询接口隔离原则(ISP)迪米特原则(Law of Demeter,LoD)LoD引例—人数清点LoD引例—人数清点LoD引例—人数清点开闭原则(Open-Closed Principle , OCP)定义:软件对扩展是开放的,对修改是关闭的。
开发一个软件时,应可以对其进行功能扩展(开放),在进行扩展的时候,不需要对原来的程序进行修改(关闭)好处:在软件可用性上非常灵活。
可以在软件完成后对软件进行扩展,加入新的功能。
这样,软件就可通过不断的增加新模块满足不断变化的新需求由于不修改软件原来的模块,不用担心软件的稳定性实现的主要原则抽象原则:把系统的所有可能的行为抽象成一个底层;由于可从抽象层导出一个或多个具体类来改变系统行为,因此对于可变部分,系统设计对扩展是开放的;可变性封装原则:对系统所有可能发生变化的部分进行评估和分类,每一个可变的因素都单独进行封装;COP引例—书店销售书籍COP引例—书店销售书籍项目投产了,书籍正常销售出去,书店也盈利了。
从2008年开始,全球经济都开始下滑,对零售业影响还是比较大,书店为了生存开始打折销售:所有40元以上的书籍9折销售,其他的8折销售。
对已经投产的项目来说,这就是一个变化,我们来看看这样的一个需求变化,我们该怎么去应对,有三种方法可以解决这个问题:修改接口:在IBook上新增加一个方法getOffPrice();修改实现类:修改NovelBook类中的方法,直接在getPrice()中实现打折处理;通过扩展实现变化。