设计模式(十一)桥接模式
来源:互联网 发布:博世华域武汉待遇知乎 编辑:程序博客网 时间: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
阅读全文
0 0
- 设计模式(十一)桥接模式
- 设计模式 (十一)桥模式(birdge)
- 设计模式 (十一)桥模式(birdge)
- 设计模式 (十一)桥模式(birdge)
- 设计模式十一(桥接模式,python 语言实现)
- Java设计模式(十一)
- C++设计模式(十一) strategy模式
- 设计模式(十一)-观察者模式
- 设计模式(十一)策略模式
- Java设计模式(十一)----组合模式
- 设计模式(二十一)---组合模式
- 设计模式(十一)抽象工厂模式
- java设计模式(十一)--状态模式
- 设计模式(十一)策略模式
- 设计模式(十一)策略模式
- 设计模式(十一)外观模式
- Android设计模式(十一)-观察者模式
- 设计模式(二十一) 状态模式
- FastCGI sent in stderr: "Primary script unknown" while reading response head
- 【Tip】csdn博客markdown编辑器手动修改水印
- ARP协议
- linux mysql 数据库的 的更新
- 分享几个前端干货,面试经常提
- 设计模式(十一)桥接模式
- 将 Oracle JDBC 驱动发布到Nexus上
- git恢复未上传到仓库的已经被删除的本地文件
- OpenJudge 2.2-1750 全排列
- 匹配二进制流中的字符串
- python常见的两种装饰器
- Spring Boot整合Dubbo运行
- 快速认识Java内存区域划分
- java后台自定义错误页面