设计模式--之桥接模式 笔记

本文通过一个具体的示例,深入浅出地介绍了桥接模式的概念及其应用场景。尤其关注于解决两个维度扩展所带来的排列组合问题,展示了如何通过桥接模式降低系统的耦合度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



背景:  男孩要最妹妹


桥接模式:::如果在子类的扩展上有两个维度,,那么这时候想要解耦合,,解决两个维度的
排列组合问题,,这个时候  可以用桥接   {两个维度排列组合问题}
===========================================
男孩类

package com.linux_lihuafeng.bridge;

public class Boy {

 private String name;

 //这种表示:妹妹是哥哥的一部分,,妹妹和Boy之间的关系更紧密
 //不建议用这种方式,,建类时最好高内聚,低耦合
// MM mm ;
 
 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }
 
 public void pursue(MM mm) {
  Gift g = new Ring();
  give(g, mm);
 }
 
 public void give(Gift g, MM mm) {
  
 }
}
========================================================
妹妹类

package com.linux_lihuafeng.bridge;

public class MM {

 private String name;

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }
 
}
==========================================================
礼物类

package com.linux_lihuafeng.bridge;

public class Gift {

}

===========================================================
温暖的礼物类

package com.linux_lihuafeng.bridge;

public class WarmGift extends Gift{

}
============================================================
狂野的礼物类

package com.linux_lihuafeng.bridge;

public class WildGift extends Gift{

}
==============================================================
花类

package com.linux_lihuafeng.bridge;

public class Flower extends Gift{

}
==============================================================
戒指类

package com.linux_lihuafeng.bridge;

public class Ring extends Gift{

 
}



作为Gift类来讲,,向子类扩展具体类型时,会有两个维度上的扩展


第一个维度::如  温暖型(WarmGift)、狂野型(WildGift)
第二个维度::如  花(Flower)、戒指(Ring)

这两个维度会有交叉,,如花  既有温暖型的,,又有狂野型的


                                             Gift


 WarmGift           WildGift                Flower           Ring



一种不好的解决办法::: 如 新建一个类WarmFlower,继承Flower类,这样会造成类的复杂化

使用继承时要谨慎,  因为继承是一种强烈的高耦合关系,,父类改变时,子类也会跟着改变

而设计原则是高内聚,低耦合


利用Bridge设计模式可解决这类问题


增加一个新的类,,GiftImpl,, 现在关于类型的(如 WarnGift、WildGift)继承Gift
而  具体礼物的实现(如 Flower、Ring)继承GiftImpl

如果我们想要温暖的花,,怎么办呢???

可以用聚合的手段代替继承,,{这是实际中经常用的手段}

现在的类图如下:



                          聚合


            Gift <---------------------------  GiftImpl


 WarmGift   WildGift                     Flower  Ring




=============================================================
Gift类

package com.linux_lihuafeng.bridge;

public class Gift {

 //聚合
 GiftImpl impl ;
}

==============================================================
GiftImpl类

package com.linux_lihuafeng.bridge;

public class GiftImpl {

}

==============================================================
Flower类

package com.linux_lihuafeng.bridge;

public class Flower extends GiftImpl{

}

===============================================================
Ring类
package com.linux_lihuafeng.bridge;

public class Ring extends GiftImpl{

 
}

===============================================================
WarmGift类

package com.linux_lihuafeng.bridge;

public class WarmGift extends Gift{

 public WarmGift(GiftImpl impl) {
  this.impl = impl;
 }
 
}

================================================================
WildGift类
 
package com.linux_lihuafeng.bridge;

public class WildGift extends Gift{

 public WildGift(GiftImpl impl) {
  this.impl = impl;
 }
}

=================================================================
MM类  {没有改变}

package com.linux_lihuafeng.bridge;

public class MM {

 private String name;

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }
 
}

==================================================================
Boy类

package com.linux_lihuafeng.bridge;

public class Boy {

 private String name;

 //这种表示:妹妹是哥哥的一部分,,妹妹和Boy之间的关系更紧密
 //不建议用这种方式,,建类时最好高内聚,低耦合
// MM mm ;
 
 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }
 
 public void pursue(MM mm) {
  
  //将一朵温暖的花给妹妹
  Gift g = new WarmGift(new Flower());
  give(g, mm);
  //将一枚狂野的戒指给妹妹
  Gift g2 = new WildGift(new Ring());
  give(g2, mm);
 }
 
 public void give(Gift g, MM mm) {
  
 }
}

===================================================================


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值