常用设计模式总结--桥接模式
2011-06-11 13:19
357 查看
桥接模式,
bridge
模式。
如果你是一个
linux
的爱好者,也许你会发现
linux
下有两套不太一样的桌面环境,一个是
KDE
,一个是
GNOME
。如果现在你要开发一个
linux
的桌面应用程序,估计你也会觉得头大,为每个桌面环境单独写一个程序么,那样显然不就一个聪明的主意,意味着你的任意一个改动,另外一个也必须做出对应的变化。这个时候,
bridge
模式就能派上用场了。
Bridge
模式能将抽象部分与实现部分完全分离,从而让它们各自演化。
Windows
下自然也会出现这样的问题,那我们常用的显示器分辨率来说吧,常用的分辨率有
800x600
、
1027x768
、
1600x900
,那在不同的分辨率下,字符的渲染是不一样的。
桥接模式的优点
1)分离了接口和实现部分,二者独立演化
2)提高了可扩充性
3)细节对于客户来说透明
来看看具体的类图
![](http://hi.csdn.net/attachment/201106/11/1603034_13077694957J1z.png)
来看看具体实现的代码
1) Window类
2) TextWindow类
3) IconWindow类
4) WindowImp类
5) SmallWindowImp类
6) MiddleWindowImp类
7) BigWindowImp类
8) WindowSystemFactory类
需要说明一下,这是一个Window的辅助类,用来模拟在不同的窗口之间切换
最后,来看下测试程序
bridge
模式。
如果你是一个
linux
的爱好者,也许你会发现
linux
下有两套不太一样的桌面环境,一个是
KDE
,一个是
GNOME
。如果现在你要开发一个
linux
的桌面应用程序,估计你也会觉得头大,为每个桌面环境单独写一个程序么,那样显然不就一个聪明的主意,意味着你的任意一个改动,另外一个也必须做出对应的变化。这个时候,
bridge
模式就能派上用场了。
Bridge
模式能将抽象部分与实现部分完全分离,从而让它们各自演化。
Windows
下自然也会出现这样的问题,那我们常用的显示器分辨率来说吧,常用的分辨率有
800x600
、
1027x768
、
1600x900
,那在不同的分辨率下,字符的渲染是不一样的。
桥接模式的优点
1)分离了接口和实现部分,二者独立演化
2)提高了可扩充性
3)细节对于客户来说透明
来看看具体的类图
![](http://hi.csdn.net/attachment/201106/11/1603034_13077694957J1z.png)
来看看具体实现的代码
1) Window类
package zl.study.designpattern.bridge; /** * 窗口的基类,屏幕上显示的东东都可以抽象成一个Window * @author peter * */ public abstract class Window { public abstract void drawContent(); protected WindowImp getWindowImp(){ if( null == imp){ imp = WindowSystemFactory.INSTANCE.makeWindowImp(); } return imp; } WindowImp imp; }
2) TextWindow类
package zl.study.designpattern.bridge; public class TextWindow extends Window { private String content; public TextWindow(String content ){ this.content = content; } @Override public void drawContent() { getWindowImp().deviceText(content, new Point(100,100)); } }
3) IconWindow类
package zl.study.designpattern.bridge; public class IconWindow extends Window{ private String path; public IconWindow(String path){ this.path = path; } @Override public void drawContent() { getWindowImp().deviceBitmap(path, new Point(200,200), new Point(400,400)); } }
4) WindowImp类
package zl.study.designpattern.bridge; /** * Window的实现类 * @author peter * */ public interface WindowImp { public void deviceText(String content,Point point); public void deviceBitmap(String path,Point origin,Point end); }
5) SmallWindowImp类
package zl.study.designpattern.bridge; /** * 小型显示设备,eg.分辨率 800 * 600 * @author peter * */ public class SmallWindowImp implements WindowImp{ @Override public void deviceBitmap(String path, Point origin, Point end) { System.out.println("<small>"+ path); } @Override public void deviceText(String content, Point point) { System.out.println("[small]"+ content +"[coordinate]"+point.x+"//"+ point.y+"[/coordinate][/small]"); } }
6) MiddleWindowImp类
package zl.study.designpattern.bridge; /** * 中型显示设备,eg.分辨率 1024 * 768 * @author peter * */ public class MiddleWindowImp implements WindowImp{ @Override public void deviceBitmap(String path, Point origin, Point end) { System.out.println("<middle>"+ path); } @Override public void deviceText(String content, Point point) { System.out.println("[middle]"+ content +"[coordinate]"+point.x+"//"+ point.y+"[/coordinate][/middle]"); } }
7) BigWindowImp类
package zl.study.designpattern.bridge; /** * 大型显示设备,eg.分辨率 1600 * 900 还是小宽屏 * @author peter * */ public class BigWindowImp implements WindowImp{ @Override public void deviceBitmap(String path, Point origin, Point end) { System.out.println("<big>"+ path); } @Override public void deviceText(String content, Point point) { System.out.println("[big]"+ content +"[coordinate]"+point.x+"//"+ point.y+"[/coordinate][/big]"); } }
8) WindowSystemFactory类
需要说明一下,这是一个Window的辅助类,用来模拟在不同的窗口之间切换
package zl.study.designpattern.bridge; import java.util.Random; /** * 模拟类,模拟返回不同的显示终端 * @author peter * */ public class WindowSystemFactory { public WindowImp makeWindowImp(){ WindowImp imp = null; Random rand = new Random(System.currentTimeMillis()); int num = rand.nextInt(2); switch( num){ case 0: { imp = new SmallWindowImp(); break; } case 1: { imp = new MiddleWindowImp(); break; } case 2: { imp = new BigWindowImp(); break; } } return imp; } public static WindowSystemFactory INSTANCE = new WindowSystemFactory(); }
最后,来看下测试程序
package zl.study.designpattern.bridge.test; import zl.study.designpattern.bridge.TextWindow; import zl.study.designpattern.bridge.Window; /** * 桥接模式的测试程序 * @author peter * */ public class BridgeTest { public static void main(String args[]) throws Exception{ Window text1 = new TextWindow("Bridge Pattern!"); text1.drawContent(); Thread.sleep(1000); Window text2 = new TextWindow("Bridge Pattern!"); text2.drawContent(); Thread.sleep(1000); Window text3 = new TextWindow("Bridge Pattern!"); text3.drawContent(); } }
相关文章推荐
- 【设计模式总结】对常用设计模式的一些思考(未完待续。。。)
- JAVA常用设计模式总结
- 编程常用设计模式详解--(中篇)(适配器、装饰、代理、外观、桥接、组合、享元)
- 常用设计模式总结
- 常用的23种设计模式总结
- 黑马程序员_java基础复习之十常用设计模式总结
- 常用设计模式总结
- Java中常用的设计模式总结
- java常用设计模式总结
- android常用的设计模式总结 一
- 设计模式学习总结-桥接模式(Bridge Pattern)
- 软件开发常用设计模式—单例模式总结(c++版)
- 常用设计模式总结--代理模式
- java常用设计模式总结
- 常用设计模式总结及体现
- [置顶] 常用设计模式总结
- Java中常用设计模式总结
- Java中常用设计模式总结
- 常用设计模式总结--装饰模式
- 几句话总结常用的设计模式