实例demo理解面向接口思想

2024-09-08 08:48

本文主要是介绍实例demo理解面向接口思想,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

浅显的理解面向接口编程

Android开发的语言是java,至少目前是,所以理解面向接口的思想是有必要的。下面通过一个简单的例子来理解。具体的概括我也不知道怎么说。

例子: 现在我们要开发一个应用,模拟移动存储设备的读写,即计算机与U盘、MP3、移动硬盘等设备进行数据交换。已知要实现U盘、MP3播放器、移动硬盘三种移动存储设备,要求计算机能同这三种设备进行数据交换,并且以后可能会有新的第三方的移动存储设备,所以计算机必须有扩展性,能与目前未知而以后可能会出现的存储设备进行数据交换。各个存储设备间读、写的实现方法不同,U盘和移动硬盘只有这两个方法,MP3Player还有一个PlayMusic方法。

PS:这个例子我是用Android的Demo来演示的。


思路:
1.电脑类要和外部设备交互,可以让外部设备都去实现一个接口,电脑类只需要调接口中的方法,接口中的方法被具体的外部设备类实现然后被调用。
2. 电脑类需要持有接口的引用,而且电脑类可以设置接口引用,因为可能会随时更换外部设备。

Computer类代码

import com.test.inter.IMobileStorage;public class Computer {//持有一个接口引用private IMobileStorage mIMobileStorage;/*public Computer(IMobileStorage mIMobileStorage){//给电脑制作一个外部接口,可以插MP3,usb,移动硬盘等等,只要是符合IMobileStorage规则的外部设备this.mIMobileStorage = mIMobileStorage;}*///设置电脑的外部接口,可以插MP3,usb,移动硬盘等等,只要是符合IMobileStorage规则的外部设备public void setIMobileStorage(IMobileStorage mIMobileStorage){this.mIMobileStorage = mIMobileStorage;}//电脑读的方法,其实就是调接口中读的方法public void ComputerRead(){mIMobileStorage.Read();}//电脑写的方法,其实就是调用接口中的写方法public void ComputerWrite(){mIMobileStorage.Write();}}

IMobileStorage接口代码

/**所有移动设备的接口,如usb,移动硬盘,实现了此接口才能读写* @author xh**/
public interface IMobileStorage {void Read();void Write();}

Mp3Imp实现类代码

package com.test.Imp;import android.widget.Toast;import com.test.application.MyApplication;
import com.test.inter.IMobileStorage;public class Mp3Imp implements IMobileStorage{@Overridepublic void Read() {Toast.makeText(MyApplication.getContext(), "MP3 read", 0).show();}@Overridepublic void Write() {Toast.makeText(MyApplication.getContext(), "MP3 write", 0).show();}}

Usb实现类代码

package com.test.Imp;import android.widget.Toast;import com.test.application.MyApplication;
import com.test.inter.IMobileStorage;public class Mp3Imp implements IMobileStorage{@Overridepublic void Read() {Toast.makeText(MyApplication.getContext(), "MP3 read", 0).show();}@Overridepublic void Write() {Toast.makeText(MyApplication.getContext(), "MP3 write", 0).show();}}

SuperStorage类代码

package com.test.activity;import com.test.application.MyApplication;import android.widget.Toast;/**超级存储器,没有实现IMobileStorage接口,但如果电脑要用肿么办?* 用一个转换器* @author xh**/
public class SuperStorage {public void read(){Toast.makeText(MyApplication.getContext(), "超级读", 0).show();}public void write(){Toast.makeText(MyApplication.getContext(), "超级写", 0).show();}}

SuperStorageAdapter类代码


package com.test.adapter;import com.test.activity.SuperStorage;
import com.test.inter.IMobileStorage;/**这个是转换器,实现了IMobileStorage接口* @author xh* 作用:把没有实现IMobileStorage接口规则的外部设备转换,从而到达实现了IMobileStorage接口的目的* * 原理:* 1.电脑只能调用ComputerRead方法和ComputerWrite方法* 2.ComputerRead方法和ComputerWrite方法是调用的是IMobileStorage接口中的方法* * 需求:现在的SuperStorage没有实现规定的接口,那么以前的原理就无法实现功能。* * 思路:*    1.转换器实现了接口,所以在设置外部设备的时候设置SuperStorageAdapter对象*    2. 把SuperStorage对象设置进转换器,在转换器实现的接口方法中调用SuperStorageAdapter自己独特的方法。* */
public class SuperStorageAdapter implements IMobileStorage {//持有一个SuperStorage引用private SuperStorage mSuperStorage;//设置SuperStorage对象public void setSuperStorage(SuperStorage mSuperStorage){this.mSuperStorage = mSuperStorage;}/**Read()方法是实现了接口的方法* read()方法是超级存储器自己独特的方法* */@Overridepublic void Read() {mSuperStorage.read();}@Overridepublic void Write() {mSuperStorage.write();}}

MainActivity中代码

package com.test.activity;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;import com.example.test2.R;
import com.test.Imp.Mp3Imp;
import com.test.Imp.UsbImp;
import com.test.adapter.SuperStorageAdapter;public class MainActivity extends Activity{private Button btnMp3Read;private Button btnMp3Write;private Button btnUsbRead;private Button btnUsbWrite;private Button btnSuperRead;private Button btnSuperWrite;private Computer mComputer;private Mp3Imp mp3;private UsbImp usb;private SuperStorage superStorage;private SuperStorageAdapter superStorageAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);mp3 = new Mp3Imp();usb = new UsbImp();mComputer = new Computer();//超级存储器superStorage = new SuperStorage();//超级存储器的转换器superStorageAdapter = new SuperStorageAdapter();//通过转换器转换超级存储器superStorageAdapter.setSuperStorage(superStorage);initView();}private void initView() {btnMp3Read = (Button) this.findViewById(R.id.btn_mp3_read);btnMp3Write = (Button) this.findViewById(R.id.btn_mp3_write);btnUsbRead = (Button) this.findViewById(R.id.btn_usb_read);btnUsbWrite = (Button) this.findViewById(R.id.btn_usb_write);btnSuperRead = (Button) this.findViewById(R.id.btn_super_read);btnSuperWrite = (Button) this.findViewById(R.id.btn_super_write);btnMp3Read.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//设置接口的对象mComputer.setIMobileStorage(mp3);mComputer.ComputerRead();}});btnMp3Write.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {mComputer.setIMobileStorage(mp3);mComputer.ComputerWrite();}});btnUsbRead.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {mComputer.setIMobileStorage(usb);mComputer.ComputerRead();}});btnUsbWrite.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {mComputer.setIMobileStorage(usb);mComputer.ComputerWrite();}});btnSuperRead.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {mComputer.setIMobileStorage(superStorageAdapter);mComputer.ComputerRead();}});btnSuperWrite.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {mComputer.setIMobileStorage(superStorageAdapter);mComputer.ComputerWrite();}});}}

完整demo下载地址: http://download.csdn.net/detail/u013467495/8492331

这篇关于实例demo理解面向接口思想的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1147655

相关文章

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

MySQL中C接口的实现

《MySQL中C接口的实现》本节内容介绍使用C/C++访问数据库,包括对数据库的增删查改操作,主要是学习一些接口的调用,具有一定的参考价值,感兴趣的可以了解一下... 目录准备mysql库使用mysql库编译文件官方API文档对象的创建和关闭链接数据库下达sql指令select语句前言:本节内容介绍使用C/

PyQt6 键盘事件处理的实现及实例代码

《PyQt6键盘事件处理的实现及实例代码》本文主要介绍了PyQt6键盘事件处理的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起... 目录一、键盘事件处理详解1、核心事件处理器2、事件对象 QKeyEvent3、修饰键处理(1)、修饰键类

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum

Java Stream流以及常用方法操作实例

《JavaStream流以及常用方法操作实例》Stream是对Java中集合的一种增强方式,使用它可以将集合的处理过程变得更加简洁、高效和易读,:本文主要介绍JavaStream流以及常用方法... 目录一、Stream流是什么?二、stream的操作2.1、stream流创建2.2、stream的使用2.

深入理解go中interface机制

《深入理解go中interface机制》本文主要介绍了深入理解go中interface机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前言interface使用类型判断总结前言go的interface是一组method的集合,不