`
jzinfo
  • 浏览: 117782 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

缺省适配器模式

阅读更多


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

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

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

interface Study
{
 public void StudyGrade1();
 public void StudyGrade2();
 public void StudyGrade3();
 public void StudyGrade4();
 public void ThesisPresentation();
}

 

 

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

 

public class GeneralStudent implements Study
{
 public GeneralStudent(){}

 public void StudyGrade1(){
    System.out.println("读大学一年级"); 
 }

 public void StudyGrade2(){
    System.out.println("读大学二年级"); 
 }

 public void StudyGrade3(){
    System.out.println("读大学三年级"); 
 }

 public void StudyGrade4(){
    System.out.println("读大学四年级");  

 public void ThesisPresentation(){

     System.out.println("修满了学分,参加论文答辩"); 
 
 }
}

 

 

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

 

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

 

public class SpecialStudent implements Study
{
 public GeneralStudent(){}

 public void StudyGrade1(){
    System.out.println("读大学一年级"); 
 }

 public void StudyGrade2(){
    System.out.println("读大学二年级"); 
 }

 public void StudyGrade3(){
    System.out.println("读大学三年级"); 
 }

    //这个方法空实现
 public void StudyGrade4(){} 

 public void ThesisPresentation(){

     System.out.println("修满了学分,参加论文答辩"); 
 
 }
}

 


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


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


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

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

 

public abstract class StudyAdapter implements study
{
 public void StudyGrade1(){}
 public void StudyGrade2(){}
 public void StudyGrade3(){}
 public void StudyGrade4(){}
 public void ThesisPresentation(){};
}

 

 

 

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

 

public class GeneralStudent extends StudyApater
{
 public GeneralStudent(){}

 public void StudyGrade1(){
    System.out.println("读大学一年级"); 
 }

 public void StudyGrade2(){
    System.out.println("读大学二年级"); 
 }

 public void StudyGrade3(){
    System.out.println("读大学三年级"); 
 }

 public void StudyGrade4(){
    System.out.println("读大学四年级");  

 public void ThesisPresentation(){

     System.out.println("修满了学分,参加论文答辩"); 
 
 }
}

 

 

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

 

public class SpecialStudent extends StudyApater
{
 public SpecialStudent(){}

 public void StudyGrade1(){
    System.out.println("读大学一年级"); 
 }

 public void StudyGrade2(){
    System.out.println("读大学二年级"); 
 }

 public void StudyGrade3(){
    System.out.println("读大学三年级"); 
 }

 public void ThesisPresentation(){

     System.out.println("修满了学分,参加论文答辩"); 
 
 }
}

 

 

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

 

public class DiscontinueStudyStudent extends StudyAdapter
{
 public DiscontinueStudyStudent(){}

 public void StudyGrade1(){
    System.out.println("读大学一年级"); 
 }

 public void StudyGrade2(){
    System.out.println("读大学二年级"); 
 }

}

 

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

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


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

 

分享到:
评论
3 楼 darrendu 2012-03-06  
如果我们不准备实现一个接口的全部方法时,因为我们这个类不需要用到接口中所规定的其他方法--写的很清楚,学习了
2 楼 jzinfo 2010-08-25  
{}
xtcpcgx 写道
还是有点不明白,感觉缺省适配类跟接口代码一模一样啊。



不一样

public void StudyGrade1(); 这个是定义方法

public void StudyGrade1(){}  这个是实现了方法(空实现)
1 楼 xtcpcgx 2010-08-25  
还是有点不明白,感觉缺省适配类跟接口代码一模一样啊。

相关推荐

    类适配器, 对象适配器模式,缺省适配器模式1

    适配器模式分为类适配器模式和对象适配器模式,还有缺省适配器模式。 1. **类适配器模式**: 在类适配器模式中,适配器类通过继承被适配类(Adaptee)并实现目标接口(Target)。这种方式下,适配器和被适配类之间...

    发布订阅者模式实现(内含单例模式、缺省适配器模式)

    在这个实现中,结合了单例模式和缺省适配器模式,增加了模式的灵活性和效率。 首先,我们来详细了解一下各个设计模式: 1. **发布订阅者模式(Publish-Subscribe Pattern)**: - 在这种模式中,发布者...

    缺省适配器模式 Java实现 IDEA工程

    如果希望在不修改已有代码的基础上使得机器人能够像狗一样汪汪叫,像狗一样快跑,或者像鸟一样叽叽叫,像鸟一样快快飞,使用适配器模式进行系统设计。 要求: 1、画出适合上述适配器模式的类图 2、给出相关代码。用...

    适配器模式实例之算法适配

    缺省适配器模式是一种特殊的适配器模式,它为接口提供默认的实现,允许子类只覆盖需要的方法。 在适配器模式的实例中,适配器将类的接口适配成客户所期待的另一种接口,这使得原本因为接口不兼容而不能一起工作的类...

    JAVA适配器模式.pdf

    - 接口适配器模式(或称为缺省适配器模式):当Target是一个抽象类,并且大多数方法都有默认实现,这时可以通过创建一个Adapter类并继承Target抽象类,但只重写需要特别处理的方法。这样客户端代码只需要关注这些...

    java与模式

    1:模式的简史和形而上学;2:统一建模语言UML简介;3:软件的可维护性与可复用性;4:开-闭 原则;5:java语言接口;...23:缺省适配器模式;24:合成模式;25:装饰模式;26:设计模式在JAVA I/O设计原则;28:代理模式;....

    Design Pattern

    7. **缺省适配器模式**:在某些情况下,我们可能只需要实现接口中的一部分方法,缺省适配器模式可以创建一个空的适配器类,仅覆盖需要的方法,其他方法默认不做任何处理。这减少了代码冗余,提高了代码的可复用性。 ...

    美国硅谷软件工程教育,软件设计模式1.ppt

    【软件设计模式】是软件工程领域中的核心概念,源自于...适配器模式和缺省适配器模式帮助不同组件协同工作;代理模式则用于在访问对象时增加额外功能。理解并熟练运用这些模式,将有助于提升软件开发的专业性和效率。

    原创-设计模式学习资料(一些常用模式的类图)

    最后,缺省适配器模式是一种特殊形式的Adapter模式,它提供了一个默认实现,使得子类只需要重写需要的部分。在实际应用中,这有助于减少代码量,提高代码的可复用性。 以上是对压缩包内各个设计模式的简要介绍,...

    计算机网络技术个人简历.docx

    求职者对设计模式有深入理解,包括工厂模式、单例模式、缺省适配器模式、不变模式、装饰模式、代理模式以及MVC和Spring IoC等,这些都是软件设计中的重要模式,有助于提高代码的可重用性和可维护性。他还熟练运用Web...

    java后台开发中高级工程师求职简历.docx

    * 能熟练地应用各种常见的设计模式,如工厂模式、单例模式、缺省适配器模式、不变模式、装饰模式、代理模式、MVC等 * 掌握设计模式的基本知识,如 SOLID 原则、GRASP 原则等 数据库编程 * 熟练应用 Oracle、MySQL ...

    java后台开发中高级工程师求职简历.pdf

    2. 设计模式:熟练应用各种常见的设计模式,如工厂模式、单例模式、缺省适配器模式、不变模式、装饰模式、代理模式、MVC、SpringIoC等。 二、 Web开发技术 1. Spring、Struts、Hibernate框架:熟练整合Spring+...

    java软件工程师简历(合集).docx

    3. **设计模式**: 他熟练应用多种设计模式,如工厂模式、单例模式、缺省适配器模式、不变模式、装饰模式、代理模式、MVC和Spring IoC。设计模式是解决常见编程问题的模板,能够提高代码的可重用性和可维护性。 4. *...

    计算机网络技术个人简历.pdf

    3. **设计模式**:熟悉多种设计模式,如**工厂模式、单例模式、缺省适配器模式、不变模式、装饰模式、代理模式、MVC模式**等,这些模式在解决常见问题时能提供灵活、可复用的解决方案。 4. **数据库技术**:熟练...

    实用java简历的例子

    - 求职者熟悉多种设计模式,如工厂模式、单例模式、缺省适配器模式、不变模式、装饰模式、代理模式、MVC和Spring IoC,这些设计模式的掌握证明了其在软件设计上的灵活性和专业性。 4. **数据库技术** - 熟练应用...

    Javaee复习超级重点.docx

    `LoginServlet`通常继承自`HttpServlet`,这是因为`HttpServlet`是Servlet的一种缺省适配器模式,它已经实现了HTTP协议相关的服务方法,子类只需要覆盖具体需要的方法,而不是全部实现,提高了代码的复用性和可维护...

    计算机求职意向简历.pdf

    3.能熟练的应用各种常见的设计模式:工厂模式、单例模式、缺省适配器模式、不变模式、装饰模式、代理模式、MVC、SpringIoC等; 4.熟练应用Oracle、MySQL等关系数据库编程技术; 5.熟练使用JSP、HTML、JSTL、EL等表现...

    designpattern:设计图案的使用

    4、适配器模式 分类 1、类适配器 2、对象适配器 3、缺省适配器 5、工厂模式 分类 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 这三种...

    源码:阎宏设计模式光盘

    com.javapatterns.adapter 适配器模式 com.javapatterns.bridge 桥梁模式 com.javapatterns.builder 建造者模式 com.javapatterns.carp 组合/聚合复用原则 com.javapatterns.chainofresp 责任链模式 ...

Global site tag (gtag.js) - Google Analytics