设计模式--桥接模式
2015-08-08 15:15
260 查看
生活中场景
-商城系统中常见的商品分类,以电脑为例,如何良好地处理商品分类销售的问题?
我们可以用多层继承结构实现下图的关系。
问题:
— 扩展性问题(类个数膨胀问题)
如果要增加一个新的电脑类型:只能手机,则要增加各个品牌下面的类。
如果要增加一个新的品牌,也要增加各种电脑类型的类。
— 违反单一职责原则
桥接模式核心要点:
— 处理多层继承结构,处理多维度变化的场景,将各个维度设计成独立的继承结构,使各个维度可以独立的扩展在抽象层建立关联。
桥接模式的类图:
-商城系统中常见的商品分类,以电脑为例,如何良好地处理商品分类销售的问题?
我们可以用多层继承结构实现下图的关系。
问题:
— 扩展性问题(类个数膨胀问题)
如果要增加一个新的电脑类型:只能手机,则要增加各个品牌下面的类。
如果要增加一个新的品牌,也要增加各种电脑类型的类。
— 违反单一职责原则
桥接模式核心要点:
— 处理多层继承结构,处理多维度变化的场景,将各个维度设计成独立的继承结构,使各个维度可以独立的扩展在抽象层建立关联。
/** * 品牌接口 */ public interface Brand { void sale(); } class Lenovo implements Brand{ public void sale() { System.out.println("销售联想牌电脑"); } } class Dell implements Brand{ public void sale() { System.out.println("销售戴尔牌电脑"); } } class Hasee implements Brand{ public void sale() { System.out.println("销售神州牌电脑"); } } public abstract class Computer { protected Brand brand; public Computer(Brand brand) { this.brand = brand; } public void sale(){ brand.sale(); } } class Desktop extends Computer{ public Desktop(Brand brand) { super(brand); } public void sale(){ super.sale(); System.out.println("销售台式机"); } } class Laptop extends Computer{ public Laptop(Brand brand) { super(brand); } public void sale(){ super.sale(); System.out.println("销售笔记本电脑"); } } class Pad extends Computer{ public Pad(Brand brand) { super(brand); } public void sale(){ super.sale(); System.out.println("销售平板电脑"); } } public class Client { public static void main(String[] args) { //销售联想的台式机 Computer c = new Desktop(new Lenovo()); c.sale(); //销售戴尔笔记本 Computer c1 = new Laptop(new Dell()); c1.sale(); } }
桥接模式的类图:
相关文章推荐