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

相关文章

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

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

MybatisPlus service接口功能介绍

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

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解

java String.join()方法实例详解

《javaString.join()方法实例详解》String.join()是Java提供的一个实用方法,用于将多个字符串按照指定的分隔符连接成一个字符串,这一方法是Java8中引入的,极大地简化了... 目录bVARxMJava String.join() 方法详解1. 方法定义2. 基本用法2.1 拼接

Linux lvm实例之如何创建一个专用于MySQL数据存储的LVM卷组

《Linuxlvm实例之如何创建一个专用于MySQL数据存储的LVM卷组》:本文主要介绍使用Linux创建一个专用于MySQL数据存储的LVM卷组的实例,具有很好的参考价值,希望对大家有所帮助,... 目录在Centos 7上创建卷China编程组并配置mysql数据目录1. 检查现有磁盘2. 创建物理卷3. 创

Java中的Closeable接口及常见问题

《Java中的Closeable接口及常见问题》Closeable是Java中的一个标记接口,用于表示可以被关闭的对象,它定义了一个标准的方法来释放对象占用的系统资源,下面给大家介绍Java中的Clo... 目录1. Closeable接口概述2. 主要用途3. 实现类4. 使用方法5. 实现自定义Clos

java对接第三方接口的三种实现方式

《java对接第三方接口的三种实现方式》:本文主要介绍java对接第三方接口的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录HttpURLConnection调用方法CloseableHttpClient调用RestTemplate调用总结在日常工作

Java 的 Condition 接口与等待通知机制详解

《Java的Condition接口与等待通知机制详解》在Java并发编程里,实现线程间的协作与同步是极为关键的任务,本文将深入探究Condition接口及其背后的等待通知机制,感兴趣的朋友一起看... 目录一、引言二、Condition 接口概述2.1 基本概念2.2 与 Object 类等待通知方法的区别

Java List排序实例代码详解

《JavaList排序实例代码详解》:本文主要介绍JavaList排序的相关资料,Java排序方法包括自然排序、自定义排序、Lambda简化及多条件排序,实现灵活且代码简洁,文中通过代码介绍的... 目录一、自然排序二、自定义排序规则三、使用 Lambda 表达式简化 Comparator四、多条件排序五、

Java实例化对象的​7种方式详解

《Java实例化对象的​7种方式详解》在Java中,实例化对象的方式有多种,具体取决于场景需求和设计模式,本文整理了7种常用的方法,文中的示例代码讲解详细,有需要的可以了解下... 目录1. ​new 关键字(直接构造)​2. ​反射(Reflection)​​3. ​克隆(Clone)​​4. ​反序列化