面向接口编程初认识

这段时间在学习Spring,最重要的就是IoC(控制反转)和DI(依赖注入)这都是Spring的原理与机制,我突然想到Spring里还有一个挺重要的部分就是面向接口编程!

之前也有接触过,但是由于很多的原因没有认真的学习,今天花了一个多小时仔细了看了看,有点门路了!开始讲解一些我的认知!

首先拿日常生活中的问题来说明一下,我们都有电脑,这是统一标准的,还有就是存储设备,比U盘,Mp3播放器和移动硬盘,现在就他们的读数据与写数据进行讨论,假如让我写,我一定会先将写出他们的类FlashDiks、Mp3Palyer和MobileHardDisk,分别包含他们各自的Read与Write方法,然后分别在Computer里new出来!一眼看过去,确实很符合逻辑!但是假如以后还有新的存储器呢,那么就要对Computer进行重写,好比,我现在又买了一个存储器,就要把电脑拆开,安装存储器。。。这样的过程好繁琐,没有人愿意这样,于是接口编程出来了,改进代码如下:

写一个存储类统一接口IMobieStorage

public interface IMobileStorage {
	void Read();//读数据
	void Write();//写数据
}
统一的读数据与写数据,然后让设备中实现这些接口

U盘

public class FlashDisk implements IMobileStorage{

	@Override
	public void Read() {
			System.out.println("FlashDisk Reading data....");
	}

	@Override
	public void Write() {
		System.out.println("FlashDisk Writting data...");
	}
	
}
Mp3Player:

public class Mp3Player implements IMobileStorage {

	@Override
	public void Read() {
		System.out.println("Mp3Player Reading data ....");
	}

	@Override
	public void Write() {
		System.out.println("Mp3Player Writing data...");
	}
	public void PlayMusic(){
		System.out.println("Mp3Player playing music...");
	}

}
移动硬盘MobileHardDisk

public class MobileHardDisk implements IMobileStorage {

	@Override
	public void Read() {
		System.out.println("MobileHardDisk Reading data...");
	}

	@Override
	public void Write() {
		System.out.println("MobileHardDisk Writting data ....");
	}

}
好了,这三个“生产”好了,在来看看电脑的结构,可定有接口让设备插入
public class Computer {
	//包含接口
	private IMobileStorage mobileStorage;

	public IMobileStorage getMobileStorage() {
		return mobileStorage;
	}

	public void setMobileStorage(IMobileStorage mobileStorage) {
		this.mobileStorage = mobileStorage;
	}
	//电脑的读数据操作
	public void ReadData(){
		mobileStorage.Read();
	}
	//电脑的写数据操作
	public void WriteData(){
		mobileStorage.Write();
	}
}
电脑也准备好了,接下来就是买过设备之后的测试了、

test类:

public class test {
	public static void main(String[] args) {
		Computer computer = new Computer();//我有一台电脑
		//我买了U盘
		FlashDisk flashDisk = new FlashDisk();
		//我也买了Mp3
		Mp3Player mp3Player = new Mp3Player();
		//我还有硬盘
		MobileHardDisk mobileHardDisk = new MobileHardDisk();
		//开始测试所有产品插在电脑上测试读数据与写数据功能
		computer.setMobileStorage(flashDisk);
		computer.ReadData();
		computer.WriteData();
		computer.setMobileStorage(mp3Player);
		computer.ReadData();
		computer.WriteData();
		computer.setMobileStorage(mobileHardDisk);
		computer.ReadData();
		computer.WriteData();
      }
}
结果

FlashDisk Reading data....
FlashDisk Writting data...
Mp3Player Reading data ....
Mp3Player Writing data...
MobileHardDisk Reading data...
MobileHardDisk Writting data ....

到此,可以看到这三种设备均可以正常的运行!!!!

好的,看起来没什么特别的地方,突然有一天,我买了一个特殊的存储设备,插不进去电脑的接口,而且读写数据都不一样,怎么办阿?这里需要用到适配器的概念,说白了就是USB转换接口,你需要一个适配器一头插在电脑上一头接在存储设备上,然后又能正常存取了,实现方法

特别存储设备SpecialStorage:

public class SpecialStorage {
	public void Xie(){
		System.out.println("我在写数据");
	}
	public void Du(){
		System.out.println("我在读数据");
	}
}
看到没有,这个存储设备里面的读写方法很特别。。。很巧的是,买这个设备的时候,老板送了我一个“转换器”我就不要买了,真省钱

适配器SpecialStorageAdapter:

/*
 * 通过适配器模式Adapter将Du与Xie转换成Read与Writer
 */
public class SpecialStorageAdapter implements IMobileStorage {
	private SpecialStorage specialStorage;
	
	public SpecialStorage getSpecialStorage() {
		return specialStorage;
	}

	public void setSpecialStorage(SpecialStorage specialStorage) {
		this.specialStorage = specialStorage;
	}

	@Override
	public void Read() {
		specialStorage.Du();
	}

	@Override
	public void Write() {
		specialStorage.Xie();
	}
	
}
有了是适配器,赶快插在电脑上测试一下吧!(直接在test后面续写)

//买了特别的存储器
		SpecialStorage specialStorage = new SpecialStorage();
		//赠送了一个转换器
		SpecialStorageAdapter adapter = new SpecialStorageAdapter();
		//特别存储器插在转换器
		adapter.setSpecialStorage(specialStorage);
		//再将转换器插在电脑上
		computer.setMobileStorage(adapter);
		computer.ReadData();
		computer.WriteData();
结果:

-------------------------------------------------------------------------------------
我在读数据
我在写数据
真好,正常运行,总体来看,电脑这个主体不需要做任何的修改,只需要在接口的地方做文章就行了,标准的接口我们拿来就用,特殊的,我们就加个适配器

看图片(画得很丑)

在这里牵扯到别的知识---适配器,但是我的目的是为了对接口编程的理解与操作!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值