桥接模式它是一种结构模式,主要解决的是:由于实际的需要,某个类具有2个或2个以上的维度变化,如果只是使用继承将无法实现这种需求。举个例子来说吧,买房子有豪宅和经济使用房,为了满足客户的需求可以自由选择是否带花园的房子。那就有:不带花园的豪宅、带花园的豪宅和不带花园的经济房、带花园的经济房。若客户的需求变了,房子要带后花园和前花园,这时候该如何实现。使用桥接模式就可以实现,使用前面将的策略模式也可以。下面讲解桥接模式的实现实例:
1.
package com.lanp.bridge;
/**
* 房子风格接口
* @author LanP
* @version v1.0
*/
public interface IMyHouseStyle {
String getHouseStyle(String type);
}
2.
package com.lanp.bridge;
/**
* 没有花园的房子,实现了房子风格接口
* @author LanP
* @version v1.0
*/
public class MyNoGardenHouse implements IMyHouseStyle {
@Override
public String getHouseStyle(String type) {
return type + " : 没有花园";
}
}
3.
package com.lanp.bridge;
/**
* 有花园的房子,实现了房子风格接口
* @author LanP
* @version v1.0
*/
public class MyHaveGardenHhouse implements IMyHouseStyle {
@Override
public String getHouseStyle(String type) {
return type + " : 有花园";
}
}
4.
package com.lanp.bridge;
/**
* 房子工具类,用于组合不同风格的房子
* @author Administrator
*
*/
public abstract class MyAbstractHouse {
protected IMyHouseStyle myHouseStyle;
public MyAbstractHouse(IMyHouseStyle myHouseStyle) {
this.myHouseStyle = myHouseStyle;
}
public abstract void live();
}
5.
package com.lanp.bridge;
/**
* 豪宅
* @author LanP
* @version v1.0
*/
public class MyLuxuryHouse extends MyAbstractHouse {
public MyLuxuryHouse(IMyHouseStyle myHouseStyle) {
super(myHouseStyle);
}
@Override
public void live() {
System.out.println(myHouseStyle.getHouseStyle("豪宅"));
}
}
6.
package com.lanp.bridge;
/**
* 经济适用房
* @author LanP
* @version v1.0
*/
public class MyEconomyHouse extends MyAbstractHouse {
public MyEconomyHouse(IMyHouseStyle myHouseStyle) {
super(myHouseStyle);
}
@Override
public void live() {
System.out.println(myHouseStyle.getHouseStyle("经济适用房"));
}
}
7.
package com.lanp.bridge;
/**
* 测试房子的类
* @author LanP
* @version v1.0
*/
public class TestMyHouse {
public static void main(String[] args) {
IMyHouseStyle noGardenHouse = new MyNoGardenHouse();
IMyHouseStyle haveGardenHhouse = new MyHaveGardenHhouse();
//没有花园的豪宅
new MyLuxuryHouse(noGardenHouse).live();
//有花园的豪宅
new MyLuxuryHouse(haveGardenHhouse).live();
//没有花园的经济房
new MyEconomyHouse(noGardenHouse).live();
//有花园的经济房
new MyEconomyHouse(haveGardenHhouse).live();
}
}