设计模式笔记——桥接

欢迎转载,共同进步。请注明出处:http://www.jianshu.com/u/e627f27f75b7
我们在设计某个类的时候,如果这个类存在两个维度的变化,一个维度为AB,一个维度为12,可以组合成A1,A2,B1,B2,在这种情况下,如果直接用一个类来实现的话,只要其中一个维度新增一种类型,比如新出现了3,就需要新创建A3和B3两个类,修改成本太高,而且随着维度内容的增加,修改的成本也越来越高。
桥接模式就是将这两个维度分离出来,独立发展,并且在最上层建立一个联系,使两个维度在最上层组合起来。如:
抽象一个维度为字母,另一个维度为数字。伪代码如下:
字母维度基类

class WordBase{
    NumBase num;
    public void SetNum(NumBase num){
        this.num = num;
    }
    public virtual void Handle();
}

数字维度基类

class NumBase(){
    public virtual void Handle();
}

继承基类

class A : WordBase{
    public override void Handle(){
        print("A");
        num.Handle();
    }
}

class One : NumBase{
    public override void Handle(){
        print("1");
    }
}

桥接起来

void Main(){
    WordBase a = new A();
    NumBase one = new One();
    a.SetNum(one);
    a.Handle();
}

结果为 A1

如果新增一个类Two,则只需要新增类Two即可,而不需要修改字母维度的东西,再新增一个类B,也不需要修改数字维度。

具体应用场景

设计职业类的时候,可以分一个门派维度和一个攻击类型维度,每个门派都可以有多种攻击类型,物理攻击,法术攻击,幻术攻击等等,门派就类似于上面的字母维度,而攻击类型就类似于数字维度,具体的两个维度的联系与合作就需要在最上层抽象出一个合适的连接。

文章如有错误,欢迎指正

你可能感兴趣的:(设计模式笔记——桥接)