Example 1902 16 interface和尚{ abstract class天星implements和尚{ public void吃斋0; public void吃斋(0; public void念经O; public void念经(); public void打坐O; public void打坐(0; public void撞钟O: Adapter! public void撞钟(); public void习武0; public void习武(0; public String getName()return null); public String getName(); class鲁智深extends天星{ public void习武O拳打镇关西;大 class鲁智深implements和尚{ 闹五台山;…} public void习武OX拳打镇关西;大 public String getName(){return“鲁 闹五台山…} 智深”} public String getName(){return“鲁 智深”} Compilation Error Compilation Passed Institute of Computer Software 2022-2-27 Nanjing University
Example interface 和尚{ public void 吃斋(); public void 念经(); public void 打坐(); public void 撞钟(); public void 习武(); public String getName(); } 2022-2-27 Institute of Computer Software Nanjing University 16 class 鲁智深 implements 和尚{ public void 习武(){ 拳打镇关西;大 闹五台山;…} public String getName(){ return “鲁 智深”;} } Compilation Error! abstract class 天星 implements和尚{ public void 吃斋(){}; public void 念经(){}; public void 打坐(){}; public void 撞钟(){}; public void 习武(){}; public String getName(){return null}; } class 鲁智深 extends 天星{ public void 习武(){ 拳打镇关西;大 闹五台山;…} public String getName(){ return “鲁 智深”;} } Compilation Passed! Adapter!
Applicability 02 17 如果不准备实现一个接口的所有方法时,可以 制造一个抽象类,给出所有方法的平庸的具体 实现 适配器模式把一个类的接口变换成客户端所期 待的另一种接口,适配器模式的“平庸化”形 式可以使所考察的类不必实现不需要的那部分 接口。 Institute of Computer Software 2022-2-27 Nanjing University
Applicability 如果不准备实现一个接口的所有方法时,可以 制造一个抽象类,给出所有方法的平庸的具体 实现 适配器模式把一个类的接口变换成客户端所期 待的另一种接口,适配器模式的“平庸化”形 式可以使所考察的类不必实现不需要的那部分 接口。 2022-2-27 Institute of Computer Software Nanjing University 17
&扇 Structure <接口>> AbstractService ServiceAdapter)应当是抽 +serviceOperation1() 象类,但它所提供的方法 +serviceOperation20 +serviceOperation30 却应当是具体的方法,而 不是抽象的方法一提供默 认实现。 ·具体子类可以按照需要只 ServiceAdapter 实现需要实现的方法,忽 略不需要实现的方法。 +serviceOperation10 +serviceOperation20 +serviceOperation30 Sample Code 2022-2-27 Institute of Computer Software Nanjing University
Structure 2022-2-27 Institute of Computer Software Nanjing University 18 l ServiceAdapter应当是抽 象类,但它所提供的方法 却应当是具体的方法,而 不是抽象的方法—提供默 认实现。 l 具体子类可以按照需要只 实现需要实现的方法,忽 略不需要实现的方法。 Sample Code
&扇 Bridge 102 19 Aliases:Handle/Body Intent 口将抽象部分与它的实现部分分离,使它们都可以独立地变化 口Motivation 口 要做到“抽象(接口)与实现分离”,最常用的办法是定义一 个抽象类,然后在子类中提供实现。也就是说,用继承机制 达到“抽象(接口)与实现分离” 口但是这种方法不够灵活,继承机制把实现与抽象部分永久地 绑定起来,要想独立地修改、扩展、重用抽象(接口)与实现 都非常困难。 口回顾下OCP和CARP原则.. Institute of Computer Software 2022-2-27 Nanjing University
Bridge Aliases:Handle/Body Intent 将抽象部分与它的实现部分分离,使它们都可以独立地变化 Motivation 要做到“抽象(接口)与实现分离” ,最常用的办法是定义一 个抽象类,然后在子类中提供实现。也就是说,用继承机制 达到“抽象(接口)与实现分离” 但是这种方法不够灵活,继承机制把实现与抽象部分永久地 绑定起来,要想独立地修改、扩展、重用抽象(接口)与实现 都非常困难。 回顾下OCP和CARP原则… 2022-2-27 Institute of Computer Software Nanjing University 19
&雪扇 Example 102 UNIVE 20 扩展Window:抽象使之用 于不同种类的窗口或新的 平台很不方便 Window Window XWindow PMWindow XWindow PMWindow IconWindow XIconWindow PMIconWindow 继承机制使得客户代码与 平台相关 Institute of Computer Software 2022-2-27 Nanjing University
Example 2022-2-27 Institute of Computer Software Nanjing University 20 扩展Window抽象使之用 于不同种类的窗口或新的 平台很不方便 继承机制使得客户代码与 平台相关