实例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

相关文章

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

Idea实现接口的方法上无法添加@Override注解的解决方案

《Idea实现接口的方法上无法添加@Override注解的解决方案》文章介绍了在IDEA中实现接口方法时无法添加@Override注解的问题及其解决方法,主要步骤包括更改项目结构中的Languagel... 目录Idea实现接China编程口的方法上无法添加@javascriptOverride注解错误原因解决方

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最

mysqld_multi在Linux服务器上运行多个MySQL实例

《mysqld_multi在Linux服务器上运行多个MySQL实例》在Linux系统上使用mysqld_multi来启动和管理多个MySQL实例是一种常见的做法,这种方式允许你在同一台机器上运行多个... 目录1. 安装mysql2. 配置文件示例配置文件3. 创建数据目录4. 启动和管理实例启动所有实例

Java function函数式接口的使用方法与实例

《Javafunction函数式接口的使用方法与实例》:本文主要介绍Javafunction函数式接口的使用方法与实例,函数式接口如一支未完成的诗篇,用Lambda表达式作韵脚,将代码的机械美感... 目录引言-当代码遇见诗性一、函数式接口的生物学解构1.1 函数式接口的基因密码1.2 六大核心接口的形态学

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni