Bridge桥接模式

桥接模式是指:将抽象部分与它的实现分离,使他们都可以独立地变化.

将抽象部分与其实现部分分开,使之任意增减,而无须受其他约束

实例1


Abstraction:定义抽象类的接口,维护一个指向Implementor类型对象的指针,将Client的请求转发给他的Implementor.RefinedAbsreaction扩充由Abstraction定义接口

Implementor:定义实现类的接口,该接口不一定要与Abstraction的接口完全一致,事实上这两个接口可以完全不同,一般来讲.Implementor接口仅提供基本操作,而Abstraction则定义了基于这些基本操作的较高层次的操作

ConcreteImplementor:实现Implementor接口定义它的具体实现

实例2

比如我们日常生活中经常使用的门,从其材质角度划分克包括塑料门,塑钢门,木门,从其形式角度划分可包括平开门、推拉门、折叠门.


门即Abstraction," 塑料门、塑钢门、木门" 即RefinedAbstraction,“门的实现”即Implementor."平开门的实现、推拉门的实现、折叠门的实现"即ConcreteImplemtor


桥接具备以下一些优势

使接口与实现各自独立

使接口实现类的扩展性大大增强

保护部分实现内容,在扩展与变更实现内容时,无须重新编译原客户程序。

基于此,我认为可以再以下几种情形下采用桥接模式进行软件设计与实现

需要增强抽象角色与具体的灵活性以避免两者之间的直接关联

实现类的变动,不影响客户端的使用

抽象接口与刘的实现通过组合,均可在子类上进行扩展

示例3.


package model.bredge;
/*
 * Implementor(HouseImp)定义实现类接口,该接口不一定要与Abstrctioin的接口完全一致
 * 事实上这两个接口可以完全不同,一般来讲Implementor接口仅提供基本操作,Abstrction则定义了这些
 */
public interface HouseImpl {
	public String doShow(String str);
}

package model.bredge;
/*
 * abstraction 定义抽象类的接口,维护一个指向实现者(implementor)接口类型(HouseImp)
 */
public abstract class House {
	protected HouseImpl houseImpl;
	
	public String setHouseImpl(HouseImpl hi){
		houseImpl = hi;
		return null;
	}
	public abstract String method(String str);
}

package model.bredge;

/*
 * 房子扩展类
 * RefinedAbstrcion(ExtensionHouse)扩充由Abstraction定义接口
 */
public class ExtensionHouse  extends House{
	public String method(String strExtension){
		String e=strExtension+"\nEXTENSION HOUSE";
		return this.houseImpl.doShow(e);
	}
	
}

package model.bredge;
/*
 * 公寓的实现
 */
public class FlatImp implements HouseImpl{

	@Override
	public String doShow(String str) {
		String a = "房子属于公寓";
		System.out.println(str+"房子属于公寓");
		return a; 	
	}

}

package model.bredge;
/*
 * Implementor(HouseImp)定义实现类接口,该接口不一定要与Abstrctioin的接口完全一致
 * 事实上这两个接口可以完全不同,一般来讲Implementor接口仅提供基本操作,Abstrction则定义了这些
 */
public interface HouseImpl {
	public String doShow(String str);
}

package model.bredge;

/*
 * 客户端程序类
 */
public class test {
	public static void main(String[] args) {
		FlatImp flatImp = new FlatImp();
		ExtensionHouse extensionHouse = new ExtensionHouse();
		extensionHouse.setHouseImpl(flatImp);
		extensionHouse.method("show1:");
	   //这里其实就用到了里氏替换原则
		VillaImp villaImp = new VillaImp();
		extensionHouse.setHouseImpl(villaImp);
		extensionHouse.method("show2:");
		
	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值