设计模式学习之桥模式
来源:互联网 发布:c语言string.h函数 编辑:程序博客网 时间:2024/09/21 06:36
桥模式:将对摸个问题抽象的不同形式分别于该问题的具体实现部分相互分离,是它们都可以独立的裱花,并且能动态的结合。这个模式是面向对象的接口隔离原则的典型实现和具体的应用。
使用桥模式可以讲对问题的抽象的不同形式与该问题的具体实现部分相互分离,使他们都可以独立的变化--因为桥模式可以提供在各个不同的实现中动态的进行交换,而不必重新编译程序。同时可以向客户端程序隐藏具体实现部分的功能细节。
下图是桥模式的设计思想在Java虚拟机中的具体应用。
Sun公司在设计Java语言是,通过Java虚拟机技术来实现Java类文件的平台无关性。儿虚拟机通过对底层操作系统平台的机器指令集技术局类型等进行统一的抽象,并针对不同的操作系统平台提供不同的虚拟机来满足该操作系统平台下Java类文件的要求。
应用桥模式的UML类图。
桥模式将问题分为问题的抽象和问题的实现了个部分。在一下情况下可以考虑用桥模式。
1)不希望在抽象和实现部分之间有一个固定的绑定关系。
2)类的抽象以及他的实现都可以通过生成子类的方法加以补充。
3)对一个抽象实现部分的修改不会产生对其客户端的影响。
桥模式的具体实现例子如下:
在某个管理系统中,需要对给定的某个字符再进行转换,但是具体的转换要求可能是进行大写转换、小写转换,同时还要求将转换后的结构进行日志输出,而日志输出可能是控制台输出,可能是浏览器输出等。
分离问题的 抽象(字符转换)和问题的实现(日志输出)。
UML类图如下
具体代码如下:
问题的抽象,字符转换抽象类如下:
package birdge;public abstract class TransferAbstract {protected OutputResultAbstract output = null;public String doTransfer(String input, int output_Type) {//模版方法output = TrasferResultFactory.getOutputResult(output_Type);String result = doTransfer(input);output.output(result);return result;}abstract public String doTransfer(String input);//传说中的钩子}日志输出,问题的实现抽象类如下:
public abstract class OutputResultAbstract {abstract public boolean output(String input);}问题的实现的工厂类,降低耦合性。
package birdge;public class TrasferResultFactory {public static final int Control = 1;public static final int JSPFile = 2;public TrasferResultFactory() {}public static OutputResultAbstract getOutputResult(int type) {OutputResultAbstract result = null;switch (type) {case Control:result = new Output_Control();break;case JSPFile:result = new Output_JSPFile();break;}return result;}}字符创转换小写具体实现类
package birdge;public class Transfer_LowerCase extends TransferAbstract {public String doTransfer(String input) {String result = input.toLowerCase();System.out.println("已经将"+input+"转化为"+result);return result;}}
字符创转换大写具体实现类
package birdge;public class Transfer_UpperCase extends TransferAbstract {public String doTransfer(String input) {String result = input.toUpperCase();System.out.println("已经将"+input+"转化为"+result);return result;}}想控制台输出日志
package birdge;public class Output_Control extends OutputResultAbstract {public boolean output(String input) {System.out.println("转化结果为:" + input + ",并已进行了日志记录");return true;}}想浏览器输出日志
package birdge;public class Output_JSPFile extends OutputResultAbstract {public boolean output(String input) {System.out.println("转化结果为:"+input+",并已想浏览器输出");return true;}}测试类。
package birdge;//这是桥模式及的测试类public class Test {public static void main(String[] args) {TransferAbstract transfer = new Transfer_LowerCase();String input = "This Is A Test String";transfer.doTransfer(input, 1);transfer.doTransfer(input, 2);transfer = new Transfer_UpperCase();transfer.doTransfer(input, 1);transfer.doTransfer(input, 2);}}
结果如下:
- 设计模式学习之桥模式
- 设计模式学习之桥接模式
- 设计模式之-桥模式
- 设计模式学习笔记之桥接模式
- 设计模式学习笔记之(桥接模式brid…
- 设计模式之桥接模式学习笔记
- 设计模式之桥接模式的学习思考
- (学习笔记)设计模式之桥接模式
- 设计模式学习之Adapter模式
- 设计模式入门学习之工厂模式
- 设计模式学习之---Adapter(适配器)模式
- 设计模式学习之---Facade(外观)模式
- 设计模式学习笔记之工厂模式
- 设计模式学习笔记之原型模式
- 设计模式学习笔记之适配器模式
- 设计模式入门学习之适配器模式
- 设计模式学习之简单工厂模式
- 设计模式学习之工厂模式
- 12ball
- 人生加减法
- SQL Server 2005 中文乱码解决方法
- 亲,透过一个view去响应另外一个view的点击事件
- Android学习笔记-TabHost选项卡使用
- 设计模式学习之桥模式
- 中国最危险的是老百姓的思维方式zz
- js调用.net后台事件,和后台调用前台等方法总结
- Android中使用GridView分页显示系统所安装的应用,支持拖动与手势滑动
- 正确的作息时间表
- Java 上加密算法的实现用例
- 程序员报名了
- datagridview样式设置
- Unix和Windows跨系统通讯编程