学习笔记——JAVA设计模式<7>桥接模式

桥接模式Bridge

只要具备多个变化维度的特点就使用桥接模式

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

类要遵守单一职责

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

不用桥接模式定义一个电脑的种类

package studyGFO;

public interface Computer {
    void sale();

}
class Desktop implements Computer{

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

}
class Loptop implements Computer{

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

}
class Pad implements Computer{

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

}

class shenzhouDesktop extends Desktop{
    @Override
    public void sale() {
        System.err.println("销售神舟台式机");
    }
}
class shenzhouLaptop extends Desktop{
    @Override
    public void sale() {
        System.err.println("销售神舟笔记本");
    }
}
class shenzhouPad extends Desktop{
    @Override
    public void sale() {
        System.err.println("销售神舟平板");
    }
}


class LenovoDesktop extends Desktop {
    @Override
    public void sale() {
        System.err.println("销售联想台式机");
    }
}

class LenovoLaptop extends Desktop {
    @Override
    public void sale() {
        System.err.println("销售联想笔记本");
    }
}

class LenovoPad extends Desktop {
    @Override
    public void sale() {
        System.err.println("销售联想平板");
    }
}
class DellDesktop extends Desktop {
    @Override
    public void sale() {
        System.err.println("销售戴尔台式机");
    }
}

class DellLaptop extends Desktop {
    @Override
    public void sale() {
        System.err.println("销售戴尔笔记本");
    }
}

class DellPad extends Desktop {
    @Override
    public void sale() {
        System.err.println("销售戴尔平板");
    }
}

修改为桥接模式

package studyGFO;

/**
 * 电脑品牌的维度
 * @author http://blog.csdn.net/thewaiting
 *
 */
public interface Brand {
    void sale();
}
class Lenovo implements Brand{
    @Override
    public void sale() {
        System.out.println("联想电脑");
    }
}
class Dell implements Brand{
    @Override
    public void sale() {
        System.out.println("戴尔电脑");
    }
}
package studyGFO;
/**
 * 电脑类型的维度
 * @author http://blog.csdn.net/thewaiting
 *
 */
public class Computer {

    protected Brand brand;

    public Computer(Brand brand) {
        this.brand = brand;
    }

    public void sale() {
        brand.sale();
    }
}

class Desktop extends Computer{

    public Desktop(Brand brand) {
        super(brand);
    }

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

    public Laptop(Brand brand) {
        super(brand);
    }

    @Override
    public void sale() {
        super.sale();
        System.out.println("销售笔记本");
    }
}
package studyGFO;
/**
 * 测试销售
 * @author http://blog.csdn.net/thewaiting
 *
 */
public class Client {   
    public static void main(String[] args) {
        //销售电脑测试
        Computer c = new Laptop(new Lenovo());
        c.sale();
    }
}

桥接模式的应用
jdbc驱动程序
AWT中的Peer架构
银行日志管理
格式分类:操作日志,交易日志,异常日志
距离分类:本地记录日志,异地记录日志
人力资源系统中的奖金计算模块
奖金分类:个人奖金,团体奖金,激励奖金
部门分类:人事部门,销售部门,研发部门
OA系统中的消息处理
业务类型:普通消息,加急消息,特急消息
发送消息方式:系统内消息,手机短息,邮件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值