文章目录
桥接模式
1.多层继承结构
1.1扩展性问题
1.2违反单一职责原则
2.桥接模式实现
2.1场景分析
2.2桥接模式核心要点:
3.代码实现
4.桥接模式总结
本文介绍下Java设计模式中的桥接模式
桥接模式
1.多层继承结构
在现实生活中比如商城中以电脑为例来说,如何处理电脑销售分类的问题,我们可以使用多层继承结构实现这种场景
问题
1.1扩展性问题
1>. 如果要增加一个新的扩展类型:智能手机,则要在每个品牌下增加一个新类
2>. 如果要新增加一个品牌,则这个品牌下要增加各个类型的电脑
1.2违反单一职责原则
一个类有两个引起该类变化的因素。
2.桥接模式实现
2.1场景分析
商城系统中常见的商品分类,以电脑为类,如何良好的处理商品分类销售的问题?
这个场景中有两个变化的维度:电脑类型、电脑品牌 这个场景中有两个变化的维度:电脑类型、电脑品牌
2.2桥接模式核心要点:
处理多层继承结构,处理多维度变化的场景,将各个维度设计成独立的继承结构,使各个维度可以独立的扩展在抽象层建立关联。
3.代码实现
品牌类
/** * 品牌 * @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("销售Dell电脑"); } } class Shenzhou implements Brand { @Override public void sale() { System.out.println("销售神舟电脑"); } }
电脑维度,也就是桥接类
/** * 电脑类型的维度 * @author Administrator * */ public class Computer2 { protected Brand brand; public Computer2(Brand b) { this.brand = b; } public void sale(){ brand.sale(); } } class Desktop2 extends Computer2 { public Desktop2(Brand b) { super(b); } @Override public void sale() { super.sale(); System.out.println("销售台式机"); } } class Laptop2 extends Computer2 { public Laptop2(Brand b) { super(b); } @Override public void sale() { super.sale(); System.out.println("销售笔记本"); } }
测试类
public class Client { public static void main(String[] args) { //销售联想的笔记本电脑 Computer2 c = new Laptop2(new Lenovo()); c.sale(); //销售神舟的台式机 Computer2 c2 = new Desktop2(new Shenzhou()); c2.sale(); } }
4.桥接模式总结
桥接模式可以取代多层继承的方案。 多层继承违背了单一职责原则,复用性较差,类的个数也非常多。桥接模式可以极大的减少子类的个数,从而降低管理和维护的成本。
桥接模式极大的提高了系统可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有的系统,符合开闭原则。