有时我们会遇到这样的业务场景,比如拿电脑来说,从类型上来看,他可以分为台式机、笔记本和平板电脑,从品牌上来看,他可以分为联想、华硕、戴尔、宏基、神舟等等,要建这些类之间的关系,就可能要建很多重复性的内容。比如联想下面有联想台式机、联想笔记本和联想平板电脑,戴尔下面有戴尔台式机、戴尔笔记本和戴尔平板电脑,这样把这些类全部建下来代码量将是非常庞大的,那么有没有一种相对简便的办法呢,那就要使用下面的桥接模式,它是用于产品的多维度发展,具体的代码实现如下:
品牌维度:
package com.bjsxt.bridge;
/**
* 品牌维度
*
* @author yufu
*
*/
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("销售戴尔");
}
}
class Acer implements Brand {
@Override
public void sale() {
System.out.println("销售宏基");
}
}
类型维度(需要持有对品牌维度的引用):
package com.bjsxt.bridge;
public class Type {
Brand brand;
public Type(Brand brand) {
super();
this.brand = brand;
}
public void sale() {
brand.sale();
}
}
class Desktop extends Type {
public Desktop(Brand brand) {
super(brand);
}
@Override
public void sale() {
brand.sale();
System.out.println("销售台式机");
}
}
class Laptop extends Type {
public Laptop(Brand brand) {
super(brand);
}
@Override
public void sale() {
brand.sale();
System.out.println("销售笔记本");
}
}
class Pad extends Type {
public Pad(Brand brand) {
super(brand);
}
@Override
public void sale() {
brand.sale();
System.out.println("销售平板电脑");
}
}
测试代码:
package com.bjsxt.bridge;
public class Client {
public static void main(String[] args) {
// 销售联想笔记本
Brand brand = new Lenovo();
Type type = new Laptop(brand);
type.sale();
}
}
输出结果:
销售联想
销售笔记本