Bridge(桥接)和Strategy(策略)模式Summary

1.Bridge意图

将抽象部分与它的实现部分分离,使它们都可以独立地变化。

 

2.Bridge适用性

你不希望在抽象和它的实现部分之间有一个固定的绑定关系。例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。

 

类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。这时bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。

 

bridge模式是往往是为了利用已有的方法或类。它将原来不统一,不兼容的接口封装起来,变成统一的接口。

 

3.Bridge类图

//待编辑

 

4.Bridge简单代码实现

 

 

public abstract class Abstraction {
	protected Implementor imp;//持有一个接口,在运行时动态set
	public void setImplementor(Implementor imp){
		this.imp = imp;
	}
	abstract public void operation(String str);
}

 

 

public class RefinedAbstraction extends Abstraction{
	
	public void operation(String str) {
		System.out.println(str);
		System.out.println("RefinedAbstraction.operation()");
		str = "other";
		imp.operaiontImpl(str);//实现部分调用,并可以相互传递参数
	}
}
 

 

public interface Implementor {//抽象部分接口
	void operaiontImpl(String str);
}

 

 

public class ConcreteImplementorA implements Implementor{
	public void operaiontImpl(String str) {
		System.out.println("ConcreteImplementorA.operaiontImpl()");
		System.out.println(str);
	}
}
 

 

public class Client {
	public static void main(String[] args) {
		Abstraction ab = setMyAbstraction();
		
		String str = "new";
		
		ab.operation(str);
	}

	private static Abstraction setMyAbstraction() {
		Abstraction ab = null;
		
		ab = new RefinedAbstraction();
		ab.setImplementor(new ConcreteImplementorA());
		return ab;
	}
}
 

5.Strategy(策略)

策略模式实现比较简单类似于桥接模式,则不提供源码实现。

 

意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。

 

适用性:

 

strategy模式是为了扩展和修改,并提供动态配置。它往往可以在同一环境当中使用不同的策略,就是调用不同的派生类。其内部实现是自由的,不受已有的类接口的限制(很多时候根本就不调用现成的接口)。   

 

类图:

//待编辑

 

6.Bridge和Strategy区别

 

1)Bridge模式和Strategy模式相似就是因为他们都将任务委托给了另外一个接口的具体实现,他们之间的区别在于Bridge的目的是让底层实现和上层接口可以分别演化,从而提高移植性而Strategy的目的是将复杂的算法封装起来,从而便于替换不同的算法。


2)以相对策略模式,桥接模式要表达的内容要更多,结构也更加复杂。桥接模式表达的主要意义其实是接口隔离的原则,即把本质上并不内聚的两种体系区别 开来,使得它们可以松散的组合,而策略在解耦上还仅仅是某一个算法的层次,没有到体系这一层次。从结构图中可以看到,策略的结构是包容在桥接结构中的,桥接中必然存在着策略模式,Abstraction与Implementor之间就可以认为是策略模式,但是桥接模式一般Implementor将提供一系 列的成体系的操作,而且Implementor是具有状态和数据的静态结构。而且桥接模式Abstraction也可以独立变化。


 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值