场景
商城里的电脑分类问题
- 电脑类型:
台式机、笔记本、平板电脑
- 电脑品牌:
联想、戴尔、神舟
未使用桥接模式时的解决方式
用多层继承结构实现
image
问题:
- 扩展性问题(类膨胀问题):
如果要增加一个新的电脑类型:智能手机。则要增加各个品牌下面的类。
如果要增加一个新的电脑品牌,也要增加各种电脑类型的类。
- 违反单一职责原则
一个类:联想笔记本,有两个引起这个类型的原因。
桥接模式
场景分析(即使用桥接模式的场景):
商城系统中常见的商品分类,以电脑为例,如何处理商品分类问题?
分析:这个场景有两个变化的维度:电脑类型、电脑品牌
image
桥接模式的核心要点:
处理多层继承结构,处理多维度变化的场景。将各个维度设计成独立的继承结构,使各个维度可以独立的扩展,在抽象层建立关联。
类图及代码实现:
image/*
* 电脑类型基类
* 抽象构件
*/
public class Computer{
private Brand brand;
public Computer(Brand b) {
this.brand = b;
}
public void sale() {
brand.sale();
}
}
/*
* 台式机电脑
*/
public class Desktop extends Computer{
public Desktop(Brand b) {
super(b);
}
public void sale() {
super.sale();
System.out.print("台式电脑");
}
}
/*
* 笔记本电脑
*/
public class Laptop extends Computer{
public Laptop(Brand b) {
super(b);
}
public void sale() {
super.sale();
System.out.print("笔记本电脑");
}
}
/*
* 电脑品牌接口
* 实现
*/
public interface Brand {
void sale();
}
/*
* 联想电脑品牌
*/
public class Lenovo implements Brand{
@Override
public void sale() {
System.out.print("联想");
}
}
/*
* 戴尔电脑品牌
*/
public class Dell implements Brand{
@Override
public void sale() {
System.out.print("戴尔");
}
}
/*
* 客户端
*/
public class Client {
public static void main(String[] args) {
//销售联想的笔记本电脑
Computer cp = new Laptop(new Lenovo());
cp.sale();
}
}
网友评论