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

相关文章

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

spring中的ImportSelector接口示例详解

《spring中的ImportSelector接口示例详解》Spring的ImportSelector接口用于动态选择配置类,实现条件化和模块化配置,关键方法selectImports根据注解信息返回... 目录一、核心作用二、关键方法三、扩展功能四、使用示例五、工作原理六、应用场景七、自定义实现Impor

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP