JAVA-桥接设计模式

       桥接模式是一种结构型模式,它主要应对的是:由于实际的需要,某个类具有两个或两个以上的维度变化,如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿。

      桥接模式的做法是把变化部分抽象出来,使变化部分与主类分离开来,从而将多个维度的变化彻底分离。最后,提供一个管理类来组合不同维度上的变化,通过这种组合来满足业务的需要。

 桥接模式是一种结构型模式,它主要应对的是:由于实际的需要,某个类具有两个或两个以上的维度变化,如果只是用继承将无法实现这种需要,或者使得设计变得相当臃肿。

      桥接模式的做法是把变化部分抽象出来,使变化部分与主类分离开来,从而将多个维度的变化彻底分离。最后,提供一个管理类来组合不同维度上的变化,通过这种组合来满足业务的需要。

结构图:



示范代码:

屋子要放的电气产品接口:

package test.edu.household.electric.appliances;

public interface Refrigerator {
	public void displayRefrigerator();
}

package test.edu.household.electric.appliances;

public interface TV {
	public void displayTV();
}

package test.edu.household.electric.appliances;

public interface WashingMachine {
	public void displayWashingMachine();
}

具体的电气产品类:

package test.edu.household.electric.appliances.impl;

import test.edu.household.electric.appliances.Refrigerator;

public class HaierRefrigerator implements Refrigerator {

	@Override
	public void displayRefrigerator() {
		// TODO Auto-generated method stub
		System.out.println("这是海尔冰箱");
	}

}
package test.edu.household.electric.appliances.impl;

import test.edu.household.electric.appliances.TV;

public class HaiXinTV implements TV {

	@Override
	public void displayTV() {
		// TODO Auto-generated method stub
		System.out.println("这是海信电视");
	}

}

package test.edu.household.electric.appliances.impl;

import test.edu.household.electric.appliances.Refrigerator;

public class SamSungRefrigerator implements Refrigerator {

	@Override
	public void displayRefrigerator() {
		// TODO Auto-generated method stub
		System.out.println("这是三星冰箱");
	}

}


package test.edu.household.electric.appliances.impl;

import test.edu.household.electric.appliances.TV;

public class SamSungTV implements TV {

	@Override
	public void displayTV() {
		// TODO Auto-generated method stub
		System.out.println("这是三星电视");
	}

}

package test.edu.household.electric.appliances.impl;

import test.edu.household.electric.appliances.WashingMachine;

public class SamSungWashingMachine implements WashingMachine {

	@Override
	public void displayWashingMachine() {
		// TODO Auto-generated method stub
		System.out.println("这是三星洗衣机");
	}

}

package test.edu.household.electric.appliances.impl;

import test.edu.household.electric.appliances.WashingMachine;

public class SiemensWashingMacthine implements WashingMachine {

	@Override
	public void displayWashingMachine() {
		// TODO Auto-generated method stub
		System.out.println("这是西门子洗衣机");
	}

}

要放置电气的屋子的抽象类封装屋子的公共功能(管理类):

package test.edu.house;


import test.edu.household.electric.appliances.Refrigerator;
import test.edu.household.electric.appliances.TV;
import test.edu.household.electric.appliances.WashingMachine;


public abstract class AbsHouseElectrieAppliances {
	
	protected Refrigerator ref;
	protected TV tv;
	protected WashingMachine wm;

	public abstract void displayConfig();
}


具体有哪些实际的屋子要放置电气:

package test.edu.house;

import test.edu.household.electric.appliances.Refrigerator;
import test.edu.household.electric.appliances.TV;
import test.edu.household.electric.appliances.WashingMachine;

public class NonbrandHouse extends AbsHouseElectrieAppliances{
	
	public NonbrandHouse(Refrigerator ref,TV tv,WashingMachine wm){
			super.ref = ref;
			super.tv = tv;
			super.wm = wm;
	}
	@Override
	public void displayConfig() {
		System.out.println("此屋子内的电气:");
		ref.displayRefrigerator();
		tv.displayTV();
		wm.displayWashingMachine();
	}

}

package test.edu.house;

import test.edu.household.electric.appliances.Refrigerator;
import test.edu.household.electric.appliances.TV;
import test.edu.household.electric.appliances.WashingMachine;

public class SamSungHouse extends AbsHouseElectrieAppliances{
	
	public SamSungHouse(Refrigerator ref,TV tv,WashingMachine wm){
		super.ref = ref;
		super.tv = tv;
		super.wm = wm;
}
	@Override
	public void displayConfig() {
		System.out.println("此屋子内的电气:");
		ref.displayRefrigerator();
		tv.displayTV();
		wm.displayWashingMachine();
	}
}



客户端,展示2个屋子里都有什么电气:

package test.edu.client;

import test.edu.house.AbsHouseElectrieAppliances;
import test.edu.house.NonbrandHouse;
import test.edu.house.SamSungHouse;
import test.edu.household.electric.appliances.Refrigerator;
import test.edu.household.electric.appliances.TV;
import test.edu.household.electric.appliances.WashingMachine;
import test.edu.household.electric.appliances.impl.HaiXinTV;
import test.edu.household.electric.appliances.impl.HaierRefrigerator;
import test.edu.household.electric.appliances.impl.SamSungRefrigerator;
import test.edu.household.electric.appliances.impl.SamSungTV;
import test.edu.household.electric.appliances.impl.SamSungWashingMachine;
import test.edu.household.electric.appliances.impl.SiemensWashingMacthine;

public class Client {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Refrigerator ref1 = new HaierRefrigerator();
		Refrigerator ref2 = new SamSungRefrigerator();

		TV tv1 = new HaiXinTV();
		TV tv2 = new SamSungTV();

		WashingMachine wm1 = new SamSungWashingMachine();
		WashingMachine wm2 = new SiemensWashingMacthine();

		AbsHouseElectrieAppliances aea1 = new SamSungHouse(ref2, tv2, wm1);
		AbsHouseElectrieAppliances aea2 = new NonbrandHouse(ref1, tv1, wm2);
		aea1.displayConfig();
		aea2.displayConfig();
	}
}


此屋子内的电气:
这是三星冰箱
这是三星电视
这是三星洗衣机
此屋子内的电气:
这是海尔冰箱
这是海信电视
这是西门子洗衣机


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值