我们知道,如果一个类要实现某一个接口,则必须实现该接口的全部方法

我们举例说明本科生读书的例子,本科生必须读完读四年修满所有的学分后,参加论文答辩后即可毕业.

我们定义一个本科生读书学习的接口Study。

Java代码  
  1. interface Study
  2. {
  3. public void StudyGrade1();
  4. public void StudyGrade2();
  5. public void StudyGrade3();
  6. public void StudyGrade4();
  7. public void ThesisPresentation();
  8. }

一个按照正常读书的大学生GeneralStudent,实现这个读书的接口 则如下

Java代码  
  1. public class GeneralStudent implements Study
  2. {
  3. public GeneralStudent(){}
  4. public void StudyGrade1(){
  5. System.out.println("读大学一年级");
  6. }
  7. public void StudyGrade2(){
  8. System.out.println("读大学二年级");
  9. }
  10. public void StudyGrade3(){
  11. System.out.println("读大学三年级");
  12. }
  13. public void StudyGrade4(){
  14. System.out.println("读大学四年级");
  15. public void ThesisPresentation(){
  16. System.out.println("修满了学分,参加论文答辩");
  17. }
  18. }

但是这里有另外的一种情况,比如有一些学校采用的弹性学分制,只要修满所有的学分 可以提前安排答辩 早毕业。 
比如有个学生SpecialStudent,读到大三时候已经修完了所有学分,则其不用继续读大四,直接参加论文答辩,合格后就可以毕业。如果仍然让SpeicialStudent继承study接口,则显得不合实际。

如果硬要实现,也没其他办法,我们空实现即可,代码:

Java代码  
  1. public class SpecialStudent implements Study
  2. {
  3. public GeneralStudent(){}
  4. public void StudyGrade1(){
  5. System.out.println("读大学一年级");
  6. }
  7. public void StudyGrade2(){
  8. System.out.println("读大学二年级");
  9. }
  10. public void StudyGrade3(){
  11. System.out.println("读大学三年级");
  12. }
  13. //这个方法空实现
  14. public void StudyGrade4(){}
  15. public void ThesisPresentation(){
  16. System.out.println("修满了学分,参加论文答辩");
  17. }
  18. }

在有些时候,如果我们不准备实现一个接口的全部方法时,因为我们这个类不需要用到接口中所规定的其他方法,我们按照如上的方式实现一些要用到的方法,没用的方法空实现。

很明显这是一种浪费,甚至是一种混乱。除非看过空方法的代码,否则不知道其不是空的,即使知道一些方法是空的,但不确定哪些方法是空的,哪些不是空的。这个时候我们可以考虑使用一个中间类来解决这个问题,这个中间类空实现接口的所有方法,同时,我们将这个中间类定义为抽象的,使其不可能被实例化,实例化中间过渡类没有任何实际的意义。 然后让具体的类继承这个中间类只让他覆盖自己所需的方法即可。

我们将这个中间过渡类称为 “缺省适配类”,这个模式也叫做缺省适配模式(Default Adapter)。

上个例子,我们增加一个缺省适配抽象类StudyAdapter

Java代码  
  1. public abstract class StudyAdapter implements study
  2. {
  3. public void StudyGrade1(){}
  4. public void StudyGrade2(){}
  5. public void StudyGrade3(){}
  6. public void StudyGrade4(){}
  7. public void ThesisPresentation(){};
  8. }

下面我们来看不同的具体类怎么使用这个缺省适配类.
普通的全日制大学生 GeneralStudent:

Java代码  
  1. public class GeneralStudent extends StudyApater
  2. {
  3. public GeneralStudent(){}
  4. public void StudyGrade1(){
  5. System.out.println("读大学一年级");
  6. }
  7. public void StudyGrade2(){
  8. System.out.println("读大学二年级");
  9. }
  10. public void StudyGrade3(){
  11. System.out.println("读大学三年级");
  12. }
  13. public void StudyGrade4(){
  14. System.out.println("读大学四年级");
  15. public void ThesisPresentation(){
  16. System.out.println("修满了学分,参加论文答辩");
  17. }
  18. }

提前修满学分特殊的大学生SpecialStudent:

Java代码  
  1. public class SpecialStudent extends StudyApater
  2. {
  3. public SpecialStudent(){}
  4. public void StudyGrade1(){
  5. System.out.println("读大学一年级");
  6. }
  7. public void StudyGrade2(){
  8. System.out.println("读大学二年级");
  9. }
  10. public void StudyGrade3(){
  11. System.out.println("读大学三年级");
  12. }
  13. public void ThesisPresentation(){
  14. System.out.println("修满了学分,参加论文答辩");
  15. }
  16. }

读到大二就退学的大学生DiscontinueStudyStudent:

Java代码  
  1. public class DiscontinueStudyStudent extends StudyAdapter
  2. {
  3. public DiscontinueStudyStudent(){}
  4. public void StudyGrade1(){
  5. System.out.println("读大学一年级");
  6. }
  7. public void StudyGrade2(){
  8. System.out.println("读大学二年级");
  9. }
  10. }

如此一来,方便很多。程序逻辑更清晰明了了。

在java API中 就有很多类似的例子。比如java.awt.WindowAdapter  它就空实现了接口WindowListener的全部方法,它就是一个缺省适配类。

java.awt中很多的缺省适配类,可以自己看下。

本文转自http://jzinfo.iteye.com/blog/558373,所有权力归原作者所有。

设计模式--缺省适配模式相关推荐

  1. 设计模式-缺省适配类.

    在有些时候,如果我们不准备实现一个接口的全部方法时,因为我们这个类不需要用到接口中所规定的其他方法,我们按照如上的方式实现一些要用到的方法,没用的方法空实现. 很明显这是一种浪费,甚至是一种混乱.除非 ...

  2. java 外部接口调用 设计模式_《Java设计模式》之接口模式

    -----------模式是思想的体现,而非具体的实现. 抽象的讲,类的接口是类允许其他类对象访问的方法与字段集.接口通常代表一种承诺,即方法需要实现接口方法名表示的操作,遵循代码注释和其他文档说明, ...

  3. Java设计模式之简单工厂模式(Simple Factory)

    [Java与模式]简单工厂模式(Simple Factory---吴义) 首先说明,Java与模式一系列的文章均是参考阎宏博士的<Java与模式>一书,加上自身的一些体会的探索,产生如下文 ...

  4. 适配接口 java_【Java 设计模式】接口型模式--Adapter(适配器)模式

    简介:[Java设计模式]接口型模式–Adapter(适配器)模式Adapter模式的宗旨就是:向客户提供接口,并使用现有的类所提供的服务,以满足客户的需求. 或者说,现在有classA的方法满足客户 ...

  5. 备战面试日记(3.3) - (设计模式.23种设计模式之结构型模式)

    本人本科毕业,21届毕业生,一年工作经验,简历专业技能如下,现根据简历,并根据所学知识复习准备面试. 记录日期:2022.1.9 大部分知识点只做大致介绍,具体内容根据推荐博文链接进行详细复习. 文章 ...

  6. 设计模式之结构型模式:适配器模式、桥接模式、组合模式、装饰器模式、代理模式、

    文章目录 什么是结构型模式 适配模式 适配器的数据结构 适配器的实现 缺省适配器 适配器优缺点 适配器模式的使用环境 桥接模式 桥接模式数据结构 桥接模式的实现 桥接模式和适配器模式的联用 桥接模式的 ...

  7. Java最全的设计模式之结构型模式

    这篇接着上篇,结构型模式包含了七种,没有看过上篇的可以点击超链接 Java设计模式之创建型模式 Java设计模式之创建型模式 9.适配器模式 9.1结构型模式 9.2适配器模式的定义 9.3适配器模式 ...

  8. 【白话设计模式二】外观模式(Facade)

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factory) [白话设计模式二] ...

  9. 【设计模式】装饰者模式 ( 概念 | 适用场景 | 优缺点 | 与继承对比 | 定义流程 | 运行机制 | 案例分析 )

    文章目录 I . 装饰者模式概念 II . 装饰者模式适用场景 III . 装饰者模式优缺点 IV . 装饰者模式与继承对比 V . 装饰者模式相关设计模式 VI . 装饰者模式四个相关类 VII . ...

最新文章

  1. centos下使用mysql,centos下使用mysql的一些问题和解决方法
  2. Object of type 'ListSerializer' is not JSON serializable “listserializer”类型的对象不可JSON序列化...
  3. python入门经典例题-Python入门经典练习题
  4. 带收缩因子的PSO优化算法
  5. IIS报错,App_global.asax.×××.dll拒绝访问
  6. POJ 2195 Going Home / HDU 1533(最小费用最大流模板)
  7. ubuntu mysql 中午_Ubuntu更改MySQL字符集UTF-8,正确显示中文
  8. 【算法竞赛学习】金融风控之贷款违约预测-建模与调参
  9. python列表动态添加_在Python中动态创建列表
  10. java.sql.SQLException: ORA-01691: Lob 段 SONARQUBE2.SYS_LOB0000119128C00008$$ 无法通过 128 (在表空间 USERS 中
  11. 【Java】ASCII类对ASCII码的处理
  12. java mock void_如何使用Mockito模拟void方法 - How to mock void methods with Mockito
  13. LINUX SHELL mkdir建立多级目录
  14. ThinkPHP(TP框架)的归纳与总结(一)----基于TP开发手册
  15. 一文学会如何做电商数据分析(附运营分析指标框架)
  16. 计算机英特尔显卡在哪找,Win10英特尔显卡设置在哪里 英特尔核芯显卡控制面板六大功能详解...
  17. ActiveX是什么?界面开发有哪些好用的ActiveX控件推荐?
  18. 代理服务器搭建socks5环境的方法
  19. 用PPO玩2048游戏--可以达到合成2048的目的
  20. 10.11_attention

热门文章

  1. Java设计模式1:设计模式概论
  2. excel导入到mysql
  3. 静态代码块与静态函数的执行顺序
  4. 你还在使用IE6浏览器么?
  5. PHP中 htmlspecialchars,htmlentities, nl2br函数
  6. html 如何把图片作为背景_办公软件操作技巧062:如何给word文档添加图片背景
  7. 层间距离对ct图像的影响_CT专业知识掌握基础、了解原理
  8. 2021年7月国产数据库排行榜:openGauss成绩依旧亮眼,Kingbase向Top 10发起冲刺
  9. 案例分析:倾斜值传入导致 SQL 资源消耗升高
  10. 极速体验:Oracle 18c 下载和Scalable Sequence新特性