应用场景:抽象部分与实现部分分离,使它们都可以独立的变化。
创建一个抽象类:
package bridge;public abstract class Abstraction { protected Interfacor interfacor; public Abstraction(Interfacor interfacor){ this.interfacor=interfacor; } public void opration(){ interfacor.opration(); }}
创建一个接口:
package bridge;public interface Interfacor { public void opration();}
创建两个接口实现:
package bridge;public class InterfacorImpl1 implements Interfacor{ @Override public void opration() { System.out.println("实现A功能"); }}
package bridge;public class InterfacorImpl2 implements Interfacor{ @Override public void opration() { System.out.println("实现功能B"); }}
创建子类实现抽象类:
package bridge;public class RefineAbstraction extends Abstraction{ public RefineAbstraction(Interfacor interfacor) { super(interfacor); } public void RefineOperation(){ System.out.println("子类重新定义"); }}
测试:
package bridge;public class Test { public static void main(String[] args) { Interfacor interfacor=new InterfacorImpl1(); RefineAbstraction abstraction=new RefineAbstraction(interfacor); abstraction.opration(); abstraction.RefineOperation(); }}
结果:
实现A功能子类重新定义
这样把抽象和实现分离,需要哪个实现就调哪个实现。
再来个应用场景:
这上边有两个维度,一个是抽象的消息(普通消息,加急消息,特级消息),另一个维度是具体的实现(email,手机短消息,站内短消息)
这两个维度有九种不同的可能性。现在出现问题的根本原因,就在于消息的抽象和实现是混杂在一起的,这就导致了,一个纬度的变化,会引起另一个纬度进行相应的变化,从而使得程序扩展起来非常困难。要想解决这个问题,就必须把这两个纬度分开,也就是将抽象部分和实现部分分开,让它们相互独立,这样就可以实现独立的变化,使扩展变得简单。
那么如何实现呢?
根据上面的方法。
首先也是定义抽象接口。
再定义抽象类
再实现抽象接口
再继承抽象类