设计模式----Bridge模式

Bridge
1.隶属类型:结构模式
2.使用条件:
通常,当一个抽象类或接口有多个具体实现(concrete subclass),这些concrete 之间关系可
能有以下两种:
a.这多个具体实现之间恰好是并列的,如打架,要不徒手,要不带点家伙.两者之间并列
b.实际应用上,常常有可能在这多个具体实现之间有概念上重叠.那么需要我们把抽
象共同部分和行为共同部分各自独立开来,原来是准备放在一个接口里,现在需要设计两个
接口,分别放置抽象和行为.(关键 :抽象共同部分与行为共同部分的独立分开.),又如上
打架带家伙得看看带的是什么.什么木制的,管制的,砖制的,一大批,在加上原来的徒手的
在加上打架的风格,是暴打族还是这灵巧型....
打架的家族也够狠的,懵懵懂懂的搞了一大堆继承,挂矣...

3.基本思想:
将抽象和行为划分开来,各自独立,但能动态的结合.

4.示例
/**
 *  The Abstract of fight
 */
public abstract class Fight
{
 protected String name;
 public abstract void hitOthers();
 public String getName()
 {
  return name;
 }
 protected FightImp getProps(String prop)
 {//factory
  if(prop.equals("knife"))
  {
   return new FightImpKnife();
  }  
  else if(prop.equals("brick"))
  {
   return new FightImpBrick();
  }
     else
  {
   return new FightImpEmpty();
  }
 }
}

/**
 *  The RefinedAbstraction
 */
public class FightCrazy extends Fight
{
 FightImp prop;
 public FightCrazy(String prop,String name)
 {
  this.prop=getProps(prop);
  this.name=name;
 }
 public void hitOthers()
 {
  System.out.println("暴打族:"+getName());
        prop.useProps();
 }
}


/**
 *  The RefinedAbstraction
 */
public class FightSmart extends Fight
{
 FightImp prop;
 public FightSmart(String prop,String name)
 {
  this.prop=getProps(prop);
  this.name=name;
 }
 public void hitOthers()
 {
  System.out.println("身手敏捷型:"+getName());
        prop.useProps();
 }
}


/**
 *  The Implementor
 */
public interface FightImp
{
 public abstract void useProps();
}


/**
 *  The ConcreteImplementor
 */
public class FightImpBrick implements FightImp
{
 public void useProps()
 {
  System.out.println("国产板砖,质优价廉.若使用满意请按13xxxxxxxxx继续定购");
 }
}


/**
 *  The ConcreteImplementor
 */
public class FightImpKnife implements FightImp

 public void useProps()
 {
  System.out.println("厚背杀猪刀");
 }
}

/**
 *  The ConcreteImplementor
 */
public class FightImpEmpty implements FightImp
{
 public void useProps()
 {
  System.out.println("最搞境界:空手套白狼");
 }
}


Abstraction (Fight )
— 定义抽象类的接口。
— 维护一个指向Implementor类型对象的指针。
. RefinedAbstraction (FightCrazy,FightSmart)
— 扩充由Abstraction定义的接口。
. Implementor (XXImp)
— 定义实现类的接口,该接口不一定要与Abstraction的接口完全一致;事实上这两个
接口可以完全不同。一般来讲, Implementor接口仅提供基本操作,而Abstraction则
定义了基于这些基本操作的较高层次的操作。
. ConcreteImplementor (XxxImp)
— 实现Implementor接口并定义它的具体实现。

5.归纳:
1.Bridge 模式的执行类如"打架"和"使用的道具"是一对一的关系, 正确创建FightImp
是该模式的关键,
2.抽象共同部分中一定有一个行为的interface作为其属性 并用有一方法作为它初始的入口:getProps();
3.在其"抽象共同部分"具体的行为过程中添加"行为属性"的行为,每一个RefinedAbstraction中都有一个Imp做为其成员变量,聚合使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值