设计模式(十一)桥接模式

来源:互联网 发布:博世华域武汉待遇知乎 编辑:程序博客网 时间:2024/06/03 23:49

桥接模式:可以取代多层继承的方案。多层继承违背了单一职责原则,复用性较差,类的个数也非常多。桥接模式可以极大的减少子类的个数,从而降低管理和维护的成本。

桥接模式极大的提高了系统可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有的系统,符合开闭原则。


未使用桥接的代码:

public interface Product {public void advertise();//代言}//===代言的商品类===//手表class Watch implements Product{@Overridepublic void advertise() {System.out.println("手表代言");}}//衣服class Clothes implements Product{@Overridepublic void advertise() {System.out.println("衣服代言");}}//手机class Phone implements Product{@Overridepublic void advertise() {System.out.println("手机代言");}}//===明星代言类(不同的明星都要继承这些产品)===class CluoWatch extends Watch{@Overridepublic void advertise() {System.out.println("C罗手表代言");}}class CluoClothes implements Product{@Overridepublic void advertise() {System.out.println("C罗衣服代言");}}class CluoPhone implements Product{@Overridepublic void advertise() {System.out.println("C罗手机代言");}}

以上例子有2个维度:球星,产品;当增加一款产品的时候,都会增加相应球星的代言;同理,增加一个球星的时候,都会增加相应产品的代言。

故此,增加一个球员类实现代言接口,并将代理属性添加到产品类中。


使用桥接后的代码:

球员类实现代言接口:

public interface Type { void advertise();//代言}//手表class Cluo implements Type{@Overridepublic void advertise() {System.out.println("C罗代言");}}//衣服class Messi implements Type{@Overridepublic void advertise() {System.out.println("煤球代言");}}//手机class LiYi implements Type{@Overridepublic void advertise() {System.out.println("李毅代言");}}

产品类中添加球星代言接口:重写代言方法

public class ProductByBridge {private Type type;public ProductByBridge(Type type) {this.type = type;}public void advertise(){type.advertise();}}class MessiWatch extends ProductByBridge{public MessiWatch(Type type) {super(type);}@Overridepublic void advertise() {super.advertise();System.out.println("煤球手表代言");}}

测试:创建产品类,传入明星代言属性

public class Client {public static void main(String[] args) {ProductByBridge p = new MessiWatch(new Messi());p.advertise();}}
输出内容:

煤球代言
煤球手表代言


【解释】当然也可以让各种产品实现Type,只不过这时传入的参数为产品的Type


原创粉丝点击