设计模式之桥接模式

1、核心:

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

2、应用场景

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

格式分类:操作日志、交易日志、异常日志
距离分类:本地记录日志、异地记录日志
-人力资源系统中的奖金计算模块:
奖金分类:个人奖金、团体奖金、激励奖金
部门分类:人事部门、销售部门、研发部门
-OA系统中的消息处理:
业务类型:普通消息、加急消息、特急消息
发送消息方式:系统内消息、手机短信、邮件

3、代码示例:

问题:商城中商品分类,以电脑为例,有不同的类型和品牌。
桥接模式_电脑示例
上图是没有用桥接模式的分类方式,每个方块就是一个类,会有以下问题:

-扩展性问题(类个数膨胀问题)
1. 如果要增加一个新的电脑类型:智能手机,则要增加各个品牌下面的类。
2. 如果要增加一个新的品牌,也要增加各种电脑类型的类。
-违反单一职责原则:
1. 一个类:苹果笔记本,有两个引起这个类变化的原因。

使用桥接模式:

桥接模式
代码示例:

/**
 * 品牌接口
 * @author ly1
 *
 */
public interface Brand {
    void sale();
}


class Asus implements Brand{

    @Override
    public void sale() {
        System.out.println("销售华硕品牌");
    }

}
class Thinkpad implements Brand{

    @Override
    public void sale() {
        System.out.println("销售ThinkPad品牌");
    }

}
class Apple implements Brand{

    @Override
    public void sale() {
        System.out.println("销售苹果品牌");
    }

}
/**
 * 电脑抽象类
 * @author ly1
 *
 */
public abstract class Computer {
    protected Brand brand;

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

    public abstract void sale();
}

class Desktop extends Computer{
    public Desktop(Brand brand) {
        super(brand);
    }

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

    @Override
    public void sale() {
        brand.sale();
        System.out.println("销售笔记本");
    }
}
class Pad extends Computer{
    public Pad(Brand brand) {
        super(brand);
    }

    @Override
    public void sale() {
        brand.sale();
        System.out.println("销售Pad");
    }
}
/**
 * 客户端
 * @author ly1
 *
 */
public class Client {
    public static void main(String[] args) {
        Brand brand = new Apple();
        Computer c = new Pad(brand);
        c.sale();
    }
}

结果:
销售苹果品牌
销售Pad
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值