设计模式之桥接模式

设计模式之桥接模式

什么是桥接模式

核心要点:
处理多层继承结构,处理多维度变化的场景,将各个维度设置成独立的继承结构,使各个维度可以独立的扩展在抽象层建立关联。

桥接模式可以用来取代多层继承的方案,多层继承违背单一职责原则,复用性较差,类的个数也非常多,桥接模式可以极大的减少子类的个数,从而降低管理和维护的成本。
极大的提高了系统的可扩展性,在两个维度中任意扩展一个维度,都不需要修改原有的系统,否和开闭原则。


我们以电脑为例,当我们需要增加新的类型时会同时会增加新的不同品牌的类。违反了单一原则。


这里写图片描述


public interface Computer {
    void sale();
}

class Desktop implements Computer {

    @Override
    public void sale() {
        System.out.println("销售台式机");
    }

}

class Laptop implements Computer {

    @Override
    public void sale() {
        System.out.println("销售笔记本");
    }

}

class Pad implements Computer {

    @Override
    public void sale() {
        System.out.println("销售平板");
    }

}

class HpPad extends Pad {
    @Override
    public void sale() {

        System.out.println("销售Hppad");
    }
}

class lenovoPad extends Pad {
    @Override
    public void sale() {
        System.out.println("销售lenovoPad");
    }
}

class DellPad extends Pad {
    @Override
    public void sale() {
        System.out.println("销售Dellpad");
    }
}

class HpDesktop extends Desktop {
    @Override
    public void sale() {
        System.out.println("销售HpDesktop");
    }
}

class lenovoDesktop extends Desktop {
    @Override
    public void sale() {
        System.out.println("销售lenovoDesktop");
    }
}

class DellDesktop extends Desktop {
    @Override
    public void sale() {
        System.out.println("销售DellDesktop");
    }
}


class HpLatop extends Laptop {
    @Override
    public void sale() {
        System.out.println("销售HpLaptop");
    }
}

class lenovoLaptop extends Laptop {
    @Override
    public void sale() {
        System.out.println("销售lenovoLaptop");
    }
}

class DellLaptop extends Laptop {
    @Override
    public void sale() {
        System.out.println("销售DellLaptop");
    }
}

怎么使用桥接模式

我们将电脑分为两个维度,一个是电脑类型,一个是电脑品牌,将两个维度分别设置两个类,通过桥接将两个维度链接。

/**
 *  品牌的接口
 */
public interface Brind {
    void sale();
}

class Leveno implements Brind{

    @Override
    public void sale() {
        System.out.println("销售联想");
    }

}
class Hp implements Brind{

    @Override
    public void sale() {
        System.out.println("销售惠普");
    }

}
class Dell implements Brind{

    @Override
    public void sale() {
        System.out.println("销售戴尔");
    }

}

通过Computer2类桥接两个维度。


public class Computer2 {
    protected Brind brind;

    public Computer2(Brind brind) {
        super();
        this.brind = brind;
    }

    public void sale() {
        System.out.println("销售电脑");
    }

}

class Desktop2 extends Computer2{

    public Desktop2(Brind brind) {
        super(brind);
    } 
    @Override
    public void sale() {
        super.sale();
        System.out.println("销售台式");
    }

}
class Laptop2 extends Computer2{

    public Laptop2(Brind brind) {
        super(brind);
    } 
    @Override
    public void sale() {
        super.sale();
        System.out.println("销售笔记本");
    }

}

class Pad2 extends Computer2{

    public Pad2(Brind brind) {
        super(brind);
    } 
    @Override
    public void sale() {
        super.sale();
        System.out.println("销售pad");
    }

}


什么时候用桥接模式

  • JDBC驱动程序
  • AWT中的peer架构
  • 银行日志管理:

    • 格式分类:操作日志,交易日志,异常日志。
    • 距离分类:本地记录日志,记录日志。
  • OA系统中的消息处理:

    • 业务类型:普通消息,加急消息,特急消息。
    • 发送方式:系统内消息,邮件,手机短信。
  • 人力资源系统中的资金计算模块:

    • 奖金类型:个人奖金,团队奖金,激励奖金。
    • 部门类型:人事部门,销售部门,研发部门。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值