- 生活中场景
-商城系统中常见的商品分类,以电脑为例,如何良好地处理商品分类销售的问题?
我们可以用多层继承结构实现下图的关系。
问题:
— 扩展性问题(类个数膨胀问题)
如果要增加一个新的电脑类型:只能手机,则要增加各个品牌下面的类。
如果要增加一个新的品牌,也要增加各种电脑类型的类。
— 违反单一职责原则
- 桥接模式核心要点:
— 处理多层继承结构,处理多维度变化的场景,将各个维度设计成独立的继承结构,使各个维度可以独立的扩展在抽象层建立关联。
/**
* 品牌接口
*/
public interface Brand {
void sale();
}
class Lenovo implements Brand{
public void sale() {
System.out.println("销售联想牌电脑");
}
}
class Dell implements Brand{
public void sale() {
System.out.println("销售戴尔牌电脑");
}
}
class Hasee implements Brand{
public void sale() {
System.out.println("销售神州牌电脑");
}
}
public abstract 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);
}
public void sale(){
super.sale();
System.out.println("销售台式机");
}
}
class Laptop extends Computer{
public Laptop(Brand brand) {
super(brand);
}
public void sale(){
super.sale();
System.out.println("销售笔记本电脑");
}
}
class Pad extends Computer{
public Pad(Brand brand) {
super(brand);
}
public void sale(){
super.sale();
System.out.println("销售平板电脑");
}
}
public class Client {
public static void main(String[] args) {
//销售联想的台式机
Computer c = new Desktop(new Lenovo());
c.sale();
//销售戴尔笔记本
Computer c1 = new Laptop(new Dell());
c1.sale();
}
}
桥接模式的类图: