`
lwbbupt
  • 浏览: 36215 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

        虽然我在学习的过程中很少写过interface,但是却经常使用到implements,来让写的类遵循某个特定的接口。学习interface,首先我们还是先来了解一下抽象类吧:

抽象方法:仅由声明,没有方法体的方法。

包含抽象方法的类叫做抽象类,如果一个类包含一个或者多个抽象方法,则该类必须为抽象类,然而抽象类不一定必须具有抽象方法。

抽象类的功能:阻止产生这个类的任何对象(想一想单例模式??),非常有用的重构工具(我也不清楚,等以后知道了再来分析)。

 

        而对于接口interface,interface这个关键字产生一个完全抽象的类,没有任何具体的实现,接口内的方法自动都是为public的。interface与抽象类比较而言,其核心优势在于:接口允许我们可以创建一个能够向上转型为多种基类的类,来实现类似多重继承的特性(这也是我们前面分析继承与组合该如何选择的重要分析点)。

         看了看感觉接口并没有什么难点,这里重点学习下两个设计模式吧:适配器设计模式和工厂方法设计模式。

①适配器模式

我们经常遇到的情况是:需要将已有的实现类来满足特定的接口的调用。

1)已有应用Apply可以调用处理器

 

public class Apply {
	public static void process(Processor p, Object s){
		System.out.println("Using Processor" + p.name());
		System.out.println(p.process(s));
	}
	
}

 2)已有的处理器Processor接口

 

public interface Processor {
	String name();
	Object process(Object input);
}

 3)我们已经具有了高通滤波器HighPass和低通滤波器LowPass

public class Filter {
	public String name(){
		return getClass().getSimpleName();
	}
	public String process(String input){
		return input + "";
	}
}

public class HighPass extends Filter{
	double cutoff;
	@Override
	public String process(String input){
		return input + "lower than " + cutoff + "can't pass.";
	}
	public HighPass(double cutoff){
		this.cutoff = cutoff;
	}
}

public class LowPass extends Filter{
	double cutoff;
	@Override
	public String process(String input){
		return input + "higher than " + cutoff + "can't pass.";
	}
	
	public LowPass(double cutoff){
		this.cutoff = cutoff;
	}
}

 

 我们希望Apply可以直接使用高通与低通滤波器。

我们可以建立如下的适配器类:

public class FilterAdapter implements Processor{
	private Filter filter;
	public String name(){
		return filter.name();
	}
	public String process(Object input){
		return filter.process(input.toString());
	}
	
	public FilterAdapter(Filter filter){
		this.filter = filter;
	}
}

 这样便可以通过完成调用。

Apply.process(new FilterAdapter( new LowPass(5.5)), "test");
Apply.process(new FilterAdapter( new HighPass(5.5)), "test");

 可以看出FilterAdapter接收已经拥有的接口Fiter,生成满足需要Processor接口的对象。考虑一下这种方式和以前所提到的代理(避免由于继承而导致基类中的方法过度的暴露)有着异曲同工之妙。

 ②工厂方法模式

假设我们需要建立一个游戏平台,可以在上面玩耍不同的游戏,而不用修改代码。

interface Game{
	void play();
}
interface GameFactory{
	Game getGame();
}

class Checker implements Game{
	public void play(){
		System.out.println("checker game start");
	}
}

class CheckersFactory implements GameFactory{
	public Game getGame(){
		return new Checker();
	}
}

class Chess implements Game{
	public void play(){
		System.out.println("chess game start");
	}
}

class ChessFactory implements GameFactory{
	public Game getGame() {
		return new Chess();
	}
}

public class GamePlatform {
	public static void playGame(GameFactory factory){
		factory.getGame().play();
	}
	
	
	public static void main(String[] args) {
		playGame(new CheckersFactory());
		playGame(new ChessFactory());
	}
}

 我们可以看出工厂方法的优点在于我们不必事先确定game的类型,我们game的获取不是通过构造器,而是通过工厂对象调用创建game的方法,这样我们就可以将代码与接口的实现相分离,使得GamePlatform内的代码得到复用。

③接口内的field都自动为static和final,所以不能为空值,即声明时就必须初始化。

1
0
分享到:
评论

相关推荐

    java基础之接口基础.md

    java基础之接口基础

    博客资源-《java基础——接口》

    在本文中,我们将深入探讨Java接口的基础知识,包括接口的定义、使用、接口与抽象类的区别以及接口中的默认方法等核心知识点。 首先,接口在Java中是一个完全抽象的类型,它只包含常量定义和抽象方法声明,不包含...

    java 接口 java 接口java 接口

    Java接口在Java编程语言中扮演着至关重要的角色,它是实现多态性和抽象化的关键...理解和熟练使用接口是成为专业Java开发人员的基础。在实际项目中,正确地利用接口可以使代码结构清晰,易于维护,并提高代码的复用性。

    java的API接口文档模板

    Java API接口文档模板是Java初学者必须掌握的重要知识点之一。该文档模板提供了详细的接口输入输出定义,旨在帮助前后端开发人员快速了解和使用接口。下面我们将对该文档模板进行详细解释。 1. 文档概述 该文档...

    java web接口开发demo

    【Java Web接口开发】是Web应用程序开发中的一个重要环节,它允许不同的系统或客户端通过网络进行数据交互。...通过学习和实践这个示例,开发者能够掌握Java Web接口开发的基础知识,并有能力构建自己的Web服务。

    Java__接口、内部类和Java_API基础

    "Java接口、内部类和Java_API基础" Java接口是Java语言中的一个抽象概念,它定义了一组方法的集合,但不提供实现。Java接口的主要特点是它不能被实例化,必须由其他类来实现。接口的声明格式为: ``` public ...

    Java基础--接口类

    通过实现接口,类可以具备多种行为,并且能够在不修改原有代码的基础上扩展功能。接口的默认方法和静态方法进一步增强了其功能,使得接口不仅仅局限于定义抽象方法。理解并熟练运用接口类,对于编写高质量的Java应用...

    Java spring boot 接口工程

    【Java Spring Boot 接口工程】是现代Web开发中一种高效、便捷的框架组合,它将Java的强大功能与Spring Boot的简洁性融为一体,为开发者提供了快速构建可部署的服务的能力。这个工程的核心在于利用Spring Boot的自动...

    Java平台 Java虚拟机 Java 应用编程接口

    API分为基础部分和扩展部分,随着技术的发展,这些接口不断升级,如从1.1x到1.2,再到当前常用的1.4、1.7版本。 Java有三个主要的体系: 1. JavaSE(Java2 Platform Standard Edition):标准版,适用于桌面应用和...

    DELPHI 7 调用 JAVA 接口

    首先,理解Delphi 7调用Java接口的基础原理。这种通信通常依赖于Java的本地接口(JNI,Java Native Interface),它允许Java代码调用C/C++代码,而Delphi代码可以编译为C++兼容的库。因此,Delphi通过JNI桥接,可以...

    java通过url调用接口

    在Java编程中,通过URL调用接口是一种常见的网络通信方式,尤其在Web服务和API交互中扮演着重要角色。这个项目提供了一种方法,通过URL发送请求并接收响应,然后将响应的字符串转换为JSON格式进行处理。接下来,我们...

    java基础PPTJava基础PPT

    这份"Java基础PPT"涵盖了Java编程的基础知识,对于初学者或希望巩固基础知识的开发者来说是宝贵的资源。PPT的重复标题暗示内容可能深入且全面,旨在系统地讲解Java的核心概念。 在Java的基础学习中,首先会接触到的...

    Java日期操作接口

    本篇文章将详细探讨Java中的日期操作接口,特别是围绕"Java日期操作接口"这个主题,以及与之相关的`DateFilter.java`文件。 首先,Java中最基础的日期类是`java.util.Date`。这个类自Java 1.0起就存在,但它的设计...

    java基础学习(继承与接口的区别及产生原因)

    在深入探讨Java中继承与接口的区别以及其产生原因之前,我们先明确两个概念的基本定义。在面向对象编程中,继承是一种使一个类继承另一个类的属性和方法的机制,允许子类扩展或重写父类的行为。接口则是一种定义行为...

    DELPHI 11调用JAVA 接口

    使用`CreateJavaVM`函数初始化Java虚拟机(JVM),然后通过`FindClass`查找Java接口类,使用`GetMethodID`获取接口方法的ID,最后通过`CallObjectMethod`或`CallNonvirtualObjectMethod`来调用Java接口。 5. **传递...

    java基础 Java开发入门到精通PPT课件 共353页.ppt

    Java的基础知识包括语法基础、面向对象编程以及高级编程接口,这些内容构成了Java开发入门到精通的核心。 **Java语法基础**是学习Java的第一步,涵盖了变量、数据类型、运算符、控制流(如if语句、for循环、while...

    完整版java基础入门教程由浅入深讲解 Java语言编程基础 含辅助PPT资料 全套PPT课件 共15个章节.rar

    完整版java基础入门教程由浅入深讲解 Java语言编程基础 第06章 接口与包(共35页).ppt 完整版java基础入门教程由浅入深讲解 Java语言编程基础 第07章 数组与字符串(共20页).ppt 完整版java基础入门教程由浅入深...

    Java基础 学习笔记 Markdownr版

    本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...

    基于Java微信接口

    【基于Java微信接口】是关于使用Java编程语言与微信官方...总的来说,基于Java微信接口的开发涵盖了从基础的Java编程到高级的Web服务交互,需要结合理论知识和实践操作,不断学习和尝试,才能成功搭建和使用微信接口。

Global site tag (gtag.js) - Google Analytics