桥接模式出现要解决的问题:
这是一个扩展起来很麻烦的类?下面是使用单继承,多重继承实现多维度功能的
-扩展性问题(类个数膨胀问题):
如果要增加一个新的电脑类型:智能手机,则要增加各个品牌下面的类。
如果要新增加一个品牌:也要增加各种电脑类型的类。
-违反单一职责原则:
一个类,有两个原因,引起这个类的变化。
桥接模式适用场景
下面是类图
电脑接口和类的代码
package com.dasenlin.cn;
/**
* 电脑类,调用品牌具有的功能
* @author Administrator
*
*/
public class Computer {
protected Brand brand;
public Computer(Brand brand) {
super();
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 com.dasenlin.cn;
/**
* 品牌维度的接口
* @author Administrator
*
*/
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 com.dasenlin.cn;
/**
* 测试运行
* @author Administrator
*
*/
public class Client {
public static void main(String[] args) {
Computer comp = new Laptop(new Lenovo());
comp.sale();
Computer com = new Desktop(new Dell());
com.sale();
}
}