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