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

相关文章

Nginx服务器部署详细代码实例

《Nginx服务器部署详细代码实例》Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,:本文主要介绍Nginx服务器部署的相关资料,文中通过代码... 目录Nginx 服务器SSL/TLS 配置动态脚本反向代理总结Nginx 服务器Nginx是一个‌高性

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

requests处理token鉴权接口和jsonpath使用方式

《requests处理token鉴权接口和jsonpath使用方式》文章介绍了如何使用requests库进行token鉴权接口的处理,包括登录提取token并保存,还详述了如何使用jsonpath表达... 目录requests处理token鉴权接口和jsonpath使用json数据提取工具总结reques

python调用dubbo接口的实现步骤

《python调用dubbo接口的实现步骤》本文主要介绍了python调用dubbo接口的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录 ​​其他实现方式与注意事项​​ ​​高级技巧与集成​​用 python 提供 Dubbo 接口

springboot+mybatis一对多查询+懒加载实例

《springboot+mybatis一对多查询+懒加载实例》文章介绍了如何在SpringBoot和MyBatis中实现一对多查询的懒加载,通过配置MyBatis的`fetchType`属性,可以全局... 目录springboot+myBATis一对多查询+懒加载parent相关代码child 相关代码懒

C++中的解释器模式实例详解

《C++中的解释器模式实例详解》这篇文章总结了C++标准库中的算法分类,还介绍了sort和stable_sort的区别,以及remove和erase的结合使用,结合实例代码给大家介绍的非常详细,感兴趣... 目录1、非修改序列算法1.1 find 和 find_if1.2 count 和 count_if1

MySQL中如何求平均值常见实例(AVG函数详解)

《MySQL中如何求平均值常见实例(AVG函数详解)》MySQLavg()是一个聚合函数,用于返回各种记录中表达式的平均值,:本文主要介绍MySQL中用AVG函数如何求平均值的相关资料,文中通过代... 目录前言一、基本语法二、示例讲解1. 计算全表平均分2. 计算某门课程的平均分(例如:Math)三、结合

GO语言zap日志库理解和使用方法示例

《GO语言zap日志库理解和使用方法示例》Zap是一个高性能、结构化日志库,专为Go语言设计,它由Uber开源,并且在Go社区中非常受欢迎,:本文主要介绍GO语言zap日志库理解和使用方法的相关资... 目录1. zap日志库介绍2.安装zap库3.配置日志记录器3.1 Logger3.2 Sugared

Java中接口和抽象类的异同以及具体的使用场景

《Java中接口和抽象类的异同以及具体的使用场景》文章主要介绍了Java中接口(Interface)和抽象类(AbstractClass)的区别和联系,包括相同点和不同点,以及它们在实际开发中的具体使... 目录一、接口和抽象类的 “相同点”二、接口和抽象类的 “核心区别”关键区别详解(避免踩坑)三、具体使

java中的DDD思想指的是什么及在Java中的体现详解

《java中的DDD思想指的是什么及在Java中的体现详解》领域驱动设计(简称DDD)是一种软件开发方法,旨在通过对业务领域的深入理解,构建高内聚、低耦合的系统,:本文主要介绍java中的DDD思... 目录前言什么是 DDD(Domain-Driven Design)?核心思想:DDD 的三大核心概念DD