1、基本要点
1、桥接模式核心要点:处理多层继承结构,处理多维度变化的场景,将各个维度设计成独立的继承结构,使各个维度可以独立扩展,在抽象层建立关联
2、代码样例
现在有台式机、笔记本两种种数码产品
每种产品都有2个厂家供消费者选择:华为和苹果
这是没有使用桥接模式的样例
public interface ComputerWithoutBridge {
void sale();
}
class Desktop implements ComputerWithoutBridge {
@Override
public void sale() {
System.out.println("销售台式机");
}
}
class Laptop implements ComputerWithoutBridge {
@Override
public void sale() {
System.out.println("销售笔记本");
}
}
class HuaweiDesktop extends Desktop {
@Override
public void sale() {
System.out.println("销售华为台式机");
}
}
class AppleDesktop extends Desktop {
@Override
public void sale() {
System.out.println("销售苹果台式机");
}
}
class HuaweiLaptop extends Laptop {
@Override
public void sale() {
System.out.println("销售华为笔记本");
}
}
class AppleLaptop extends Laptop {
@Override
public void sale() {
System.out.println("销售苹果笔记本");
}
}
假如我们要增加一个厂家或者增加一种数码产品
如果产品种类比较多或者厂家比较多时,涉及到的扩展代码就会非常繁琐,这就不符合软件的设计原则
所以,我们需要把产品类型和厂家设计成独立的继承结构,然后让他们在抽象层建立关联
在这个例子中,我们把品牌和产品类型单独拆分成两种维度
/**
* 电脑类型维度,增加产品类型时,增加一个这个类的子类即可
*/
public class ComputerWithBridge {
// 引入品牌,使他们在抽象层建立关联
protected Brand brand;
public ComputerWithBridge(Brand brand) {
this.brand = brand;
}
public void sale() {
brand.sale();
}
}
class DeskTop extends ComputerWithBridge {
public DeskTop(Brand brand) {
super(brand);
}
@Override
public void sale() {
super.sale();
System.out.println("销售台式机");
}
}
class LapTop extends ComputerWithBridge {
public LapTop(Brand brand) {
super(brand);
}
@Override
public void sale() {
super.sale();
System.out.println("销售台式机");
}
}
/**
* 品牌维度,增加品牌时,增加一个这个类的子类即可
*/
public interface Brand {
void sale();
}
class Huawei implements Brand {
@Override
public void sale() {
System.out.println("销售华为电脑");
}
}
class Apple implements Brand {
@Override
public void sale() {
System.out.println("销售苹果电脑");
}
}
/**
* 模拟购物平台
*/
public class Client {
public static void main(String[] args) {
// 销售华为笔记本
ComputerWithBridge computer = new LapTop(new Huawei());
computer.sale();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/136816.html