桥模式 UML 及其源码
桥模式:将某个问题抽象的不同形式分别与该问题的具体实现部分相分离,使他们都可以独立变化,并能够动态结合。
例如电视厂商海尔,长虹生产21寸,29寸电视机。从这里要将它们分离出来,就用到桥模式。电视机与电视机生产厂商挂桥,从而,分离出不同厂商的实现,与不同电视机型号的实现.
下面看下uml

从上图可以看出,将实际抽象分离出来。
看下代码
创建电视机
- public abstract class Television {
- //电视厂商
- protected TelevisionMaker televisionMaker;
- //收看电视
- abstract public void teleview(TelevisionMaker televisionMaker);
- }
- public abstract class TelevisionMaker {
- abstract public void produce();
- }
- public class Inch21 extends Television{
- public void teleview(TelevisionMaker televisionMaker) {
- System.out.println("21寸电视");
- }
- }
- public class Inch29 extends Television{
- public void teleview(TelevisionMaker televisionMaker) {
- System.out.println("29寸电视");
- }
- }
- public class ChangHong extends TelevisionMaker{
- public ChangHong(){
- System.out.println("长虹厂商");
- }
- public void produce() {
- System.out.println("长虹厂商");
- }
- }
- public class Haier extends TelevisionMaker{
- public Haier(){
- System.out.println("海尔厂商");
- }
- public void produce() {
- System.out.println("海尔厂商");
- }
- }
这样就使用了桥模式,将原本繁杂的系统分离开来。如果根据需求变动,要增加电视机生产型号或者电视机生产厂商,只需要实现相对应的抽象类即可。
这样,我们也可以根据用户的需要,得到他所需要的电视机,如长虹厂商出厂的29寸电视机。
测试代码如下:
- public class Client {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- BridgePattern bp = new BridgePattern();
Inch29 i = bp.new Inch29();
i.teleview(bp.new ChangHong());
Inch21 j = bp.new Inch21();
j.teleview(bp.new Haier());
} - }
结果:
长虹厂商
29寸电视
海尔厂商
21寸电视
文章来源:http://www.javaeye.com/topic/286013 原文章中测试程序有点点小问题,我改了改,以上是可以正确运行的 环境:myeclipse
浙公网安备 33010602011771号