码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-11-11 16:45:28      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:java

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

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

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一直是执行算法里面固定的部分,然后通过不同类型的传入,分别执行不同的实现。

 

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

 

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

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

目录

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

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

标签:java

原文地址:http://blog.csdn.net/raylee2007/article/details/49722937

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!