1.桥接模式使用场景
个人觉得桥接模式是由于同一个相关问题,围绕多个因素变化。
比如电脑品牌和电脑类型,都是围绕电脑展开。
2. 何时使用桥接模式
程序为了更好的开闭,将变化的因素提成接口,将两个相关变化的因素组合在一起,就实现了"开"
举例:
- 银行日志系统
- 格式类型:操作日志、交易日志、异常日志等
- 距离类型:本地日志、异地日志
- 人力资源系统中奖金计算:
- 奖金分类:个人奖金、团体奖金、激励奖金
- 部门分类:人事部门、销售部门、研发部门
- OA系统中的消息处理
- 业务类型:普通消息、加急消息、特急消息
- 发送消息的方式:系统内消息、手机短信、邮件
3.桥接模式案例
拿计算机类型和品牌举例:
3.1 计算机品牌Brand
/**
* 品牌
*/
public interface Brand {
String sale();
}
class Lenovo implements Brand{
@Override
public String sale() {
return "销售联想电脑";
}
}
class Dell implements Brand{
@Override
public String sale() {
return "销售戴尔电脑";
}
}
3.2 创建电脑类,关联品牌
public class Computer implements Brand {
protected Brand brand;
public Computer(Brand brand) {
this.brand = brand;
}
public String sale(){
return brand.sale();
}
}
class Desktop extends Computer{
public Desktop(Brand b){
super(b);
//System.out.println("销售台式机");
}
@Override
public String sale(){
String sale = super.sale();
String finSale = sale + ", " + "台式机";
System.out.println(finSale);
return finSale;
}
}
class Laptop extends Computer{
public Laptop(Brand b){
super(b);
//System.out.println("销售笔记本");
}
@Override
public String sale(){
String sale = super.sale();
String finSale = sale + ", " + "笔记本";
System.out.println(finSale);
return finSale;
}
}
3.3 创建测试
public class Client {
public static void main(String[] args) {
Computer c = new Desktop(new Dell());
Computer c2 = new Laptop(new Lenovo());
c.sale();
c2.sale();
}
}
结果输出:
销售戴尔电脑, 台式机
销售联想电脑, 笔记本
Process finished with exit code 0
4. 桥接模式可以和哪些其他的设计模式组合使用?
- 结构型模式一般会和创建型模式搭配,因为在组成这个结构需要对象,所以创建型模式就配上了用场。
- 创建型模式包含:单例、工厂、原型、建造者
- 熟悉各个模式的使用场景,才能像辟邪剑谱一样,顺心应手。