java设计模式----桥接模式
2015-11-30 17:24
513 查看
应用场景:抽象部分与实现部分分离,使它们都可以独立的变化。
创建一个抽象类:
创建一个接口:
创建两个接口实现:
创建子类实现抽象类:
测试:
结果:
这样把抽象和实现分离,需要哪个实现就调哪个实现。
再来个应用场景:
这上边有两个维度,一个是抽象的消息(普通消息,加急消息,特级消息),另一个维度是具体的实现(email,手机短消息,站内短消息)
这两个维度有九种不同的可能性。现在出现问题的根本原因,就在于消息的抽象和实现是混杂在一起的,这就导致了,一个纬度的变化,会引起另一个纬度进行相应的变化,从而使得程序扩展起来非常困难。要想解决这个问题,就必须把这两个纬度分开,也就是将抽象部分和实现部分分开,让它们相互独立,这样就可以实现独立的变化,使扩展变得简单。
那么如何实现呢?
根据上面的方法。
首先也是定义抽象接口。
再定义抽象类
再实现抽象接口
再继承抽象类
创建一个抽象类:
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,手机短消息,站内短消息)
这两个维度有九种不同的可能性。现在出现问题的根本原因,就在于消息的抽象和实现是混杂在一起的,这就导致了,一个纬度的变化,会引起另一个纬度进行相应的变化,从而使得程序扩展起来非常困难。要想解决这个问题,就必须把这两个纬度分开,也就是将抽象部分和实现部分分开,让它们相互独立,这样就可以实现独立的变化,使扩展变得简单。
那么如何实现呢?
根据上面的方法。
首先也是定义抽象接口。
再定义抽象类
再实现抽象接口
再继承抽象类
相关文章推荐
- JavaEE_Mybatis_SpringMVC__Mybatis_lesson8_Mybatis的动态sql
- Java NIO 第一章节
- JAVA: 为什么要使用"抽象类"? 使用"抽象类"有什么好处?
- SpringMvc+maven+resin
- spring中整合quarz
- 深入分析 Java 中的中文编码问题
- Cassandra + Eclipse + Hadoop
- Struts2中解决中文乱码问题
- Maven小技巧 - eclipse.m2e的插件运行定义
- Spring学习之整合Hibernate
- Java多态
- Java抽象类和接口概念和特点理解
- Struts2返回JSON对象的方法总结
- java-map按key升序排序
- Hbase Java客户端示例
- Lucene的“helloword” ——最简单的建立、搜索索
- javaSE(14)(字节流与字符流)
- Spring4.2.3+Hibernate4.3.11整合( IntelliJ maven项目)(使用Annotation注解)(Junit测试类)
- Java内功提升之static的使用
- 传智播客Java学习路线图