设计模式(7)--桥接模式

来源:互联网 发布:三星note8网络信号差 编辑:程序博客网 时间:2024/06/05 11:08

中国人起的名字一般都具有某种含义或期许,不是说灵光一闪,脑门一拍就乱定下一个名字来,桥接模式,顾名思义,用桥连接,连接什么呢,连接两个相隔离地方

假设,我们如果要造出1A1B 1A2B 1A3B 1A4B 2A1B 2A2B 2A3B 2A4B八个类,需要建至少挨个写出这八个类,但这是正常人的最简单思维,有没有简单点的方法呢,有,桥接模式,将A和B划分为两个不同维度,建一1A 2A,建1B 2B 3B 4B六个类,让他们相互组合,就能组合出我们需要的八个类。 

如果用最原始的方法想扩展个3A 需要多写3A1B 3A2B 3A3B 3A4B,如果用桥接模式呢,只需扩展一个3A类就可以,好处显而易见。

桥接模式主要就是用来解耦的。因为有些耦合只会增加系统复杂程度和编程难度,对功能优化,简洁编程没一点好处,这时就可以考虑用桥接模式解耦。

UML类图如图所示:


A和B为聚合关系

示例代码:

A抽象类(代表一个A维度):

public abstract class A {protected B b;public void setB(B b){this.b = b;}public abstract void display();}

注:使用关联关系将A B两个维度连接(桥接)起来。

B实现接口(B维度):

public interface B {String display();}

剩下的就是A B两个维度的具体实现了,大框架搭好了,想扩展就在具体实现类上扩展。

A1类

public class A1 extends A{@Overridepublic void display() {// TODO Auto-generated method stubSystem.out.println("1A"+b.display());}}

A2类

public class A2 extends A{@Overridepublic void display() {// TODO Auto-generated method stubSystem.out.println("2A"+b.display());}}

B1类

public class B1 implements B{@Overridepublic String display() {// TODO Auto-generated method stubreturn "1B";}}

B2类:

public class B2 implements B{@Overridepublic String display() {// TODO Auto-generated method stubreturn "2B";}}

B3类:

public class B3 implements B{@Overridepublic String display() {// TODO Auto-generated method stubreturn "3B";}}


Main类:

public class Main {public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {Class AClazz = Class.forName(ReadProperties.readProperties("bridgepattern_A"));Class BClazz = Class.forName(ReadProperties.readProperties("bridgepattern_B"));A a = (A)AClazz.newInstance();B b = (B)BClazz.newInstance();a.setB(b);a.display();}}

properties配置:

bridgepattern_A=bridgepattern.A1
bridgepattern_B=bridgepattern.B3


运行结果:

1A3B


说明:

从以上代码可以看出,要想扩展出1A4B 2A4B很容易,添加一个4B类,实现B接口就行。

A和B代表两个独立的维度,所以可以使用A B的子类任意组合形成多维度组合对象。使用桥接模式最重要的是怎样判断出复杂类具有哪些维度,从而实现解耦。

我们可以称A为抽象类,B为实现类,但我们区分出两个维度后,将谁设计为抽象类?将谁设计为实现类呢?以下摘抄自C#设计模式(刘伟 胡志刚 闫朝坤):

通常情况下,将具有两个独立变化维度的类的一些普通业务方法和与之关系最模切的维度设计为抽象类层次结构(抽象部分),将另一维度设计为实现类层次结构(实现部分)。


桥接模式使用不多,有理解不到位的地方,欢迎指正,还有需要补充的知识,日后补充吧。

end

原创粉丝点击