这一章节我们来讨论一下接口怎么样解耦?使得代码灵活性增强。
我们先来看看下面的代码:
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一直是执行算法里面固定的部分,然后通过不同类型的传入,分别执行不同的实现。
总结:我们这一章节主要讲述了接口怎样解耦。
这一章节就到这里,谢谢。
-----------------------------------
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-26 13:45:32