从头认识java-7.3 接口怎样解耦?

这一章节我们来讨论一下接口怎么样解耦?使得代码灵活性增强。

我们先来看看下面的代码:

package com.ray.ch07;

public class Test {

	public static void test(Vehicle vehicle) {
		vehicle.test();
	}

	public static void main(String[] args) {
		test(new BMW());
		test(new Audi());
	}
}

class Vehicle {
	public void test() {
		System.out.println("Vehicle test");
	}
}

class BMW extends Vehicle {
	@Override
	public void test() {
		System.out.println("BMW test");
	}
}

class Audi extends Vehicle {
	@Override
	public void test() {
		System.out.println("Audi test");
	}
}



我们上面的代码主要描述的是车辆的测试。

我们再上另外一组代码:

package com.ray.ch07;

public class Test {

	public static void test(Instrument instrument) {
		instrument.test();
	}

	public static void main(String[] args) {
		test(new Wind());
		test(new Bass());
	}
}

class Instrument {
	public void test() {
		System.out.println("Instrument test");
	}
}

class Wind extends Instrument {
	@Override
	public void test() {
		System.out.println("Wind test");
	}
}

class Bass extends Instrument {
	@Override
	public void test() {
		System.out.println("Bass test");
	}
}


上面一组代码主要描述乐器的测试。

对比两组代码,其实大家会发现,测试的主代码里面大家都差不多,但是由于乐器和汽车都不是继承同样的基类,因此,测试代码不能够通用。

不能够通用的原因主要就是Instrument和Vehicle这两个类与Test耦合太深。我们下面通过接口,把两个类组合起来,使得Test里面的代码可以通用。

package com.ray.ch07;

public class Test {

	public static void test(TestObjectInterface testObjectInterface) {
		testObjectInterface.test();
	}

	public static void main(String[] args) {
		test(new Wind());
		test(new Bass());
		test(new BMW());
		test(new Audi());
	}
}

interface TestObjectInterface {
	void test();
}

class Instrument implements TestObjectInterface {
	@Override
	public void test() {
		System.out.println("Instrument test");
	}
}

class Wind extends Instrument {
	@Override
	public void test() {
		System.out.println("Wind test");
	}
}

class Bass extends Instrument {
	@Override
	public void test() {
		System.out.println("Bass test");
	}
}

class Vehicle implements TestObjectInterface {
	@Override
	public void test() {
		System.out.println("Vehicle test");
	}
}

class BMW extends Vehicle {
	@Override
	public void test() {
		System.out.println("BMW test");
	}
}

class Audi extends Vehicle {
	@Override
	public void test() {
		System.out.println("Audi test");
	}
}


我们建立一个通用接口,然后两个基类分别实现接口,然后通过向上转型,实现多态,使得TestObjectInterface这个父类指向各个不同的子类的,从而调用不同子类的方法。

在这里我们再扩展一下,上面的代码里面其实是运用了策略设计模式。TestObjectInterface一直是执行算法里面固定的部分,然后通过不同类型的传入,分别执行不同的实现。

 

总结:我们这一章节主要讲述了接口怎样解耦。

 

这一章节就到这里,谢谢。

-----------------------------------

目录

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值