设计模式学习笔记(七)-桥接模式

在软件系统中,某些类型由于自身的逻辑,具有两个或多个维度的变化,如何应对这种“多维度的变化”?桥接模式使得软件系统能够轻松地沿着多个方向变化,而又不引入额外的复杂度。桥接模式的用意是“将抽象化与实现化脱耦,使得二者可以独立的变化”

【设计原则】
1、使用聚合关联,不使用继承关联;
2、抽象化层次和实现化层次脱耦。

【使用场合】
1、不希望在抽象类和它的实现部分之间有一个固定的绑定关系;
2、类的抽象及实现都应该可以通过生成子类的方法加以扩充;
3、对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。

package demo.birdge.lights;

public interface ILight {
	//接通电源
	public void electricConnected();
	//照明
	public void light();
	//断开电源
	public void electricClose();
}


package demo.birdge.lights.impl;

import demo.birdge.lights.ILight;

public class CrystalLight implements ILight {

	@Override
	public void electricConnected() {
		System.out.println("水晶灯被打开了...");

	}

	@Override
	public void light() {
		System.out.println("水晶灯照明了!");

	}

	@Override
	public void electricClose() {
		System.out.println("水晶灯被关闭了...");

	}

}


package demo.birdge.lights.impl;

import demo.birdge.lights.ILight;

public class IncandescentLight implements ILight {

	@Override
	public void electricConnected() {
		System.out.println("白炽灯被打开了...");

	}

	@Override
	public void light() {
		System.out.println("白炽灯照明了!");

	}

	@Override
	public void electricClose() {
		System.out.println("白炽灯被关闭了...");

	}

}


package demo.birdge.switchs;

import demo.birdge.lights.ILight;

public class BaseSwitch {
	protected ILight light;
	
	public BaseSwitch(ILight light){
		this.light = light;
	}
	
	/**
	 * 开灯方法
	 */
	public final void makeLight(){
		this.light.electricConnected();
		this.light.light();
		this.light.electricClose();
	}
}


package demo.birdge.switchs.sub;

import demo.birdge.lights.ILight;
import demo.birdge.switchs.BaseSwitch;

public class RemoteControlSwitch extends BaseSwitch {

	public RemoteControlSwitch(ILight light) {
		super(light);
	}
	
	/**
	 * 使用遥控器开关控制开灯
	 * @param operColor
	 */
	public final void makeRemoteLight (int operColor){
		this.light.electricConnected();
		this.light.light();;
		String color = "";
		switch(operColor){
		case 1:
			color = "暖色";
			break;
		case 2:
			color = "蓝色";
			break;
		case 3:
			color = "红色";
			break;
		default:
			color ="白色";
			break;
		}
		System.out.println("....现在是" + color +"!");
		
		this.light.electricClose();
	}

}


package demo.birdge;

import demo.birdge.lights.ILight;
import demo.birdge.lights.impl.CrystalLight;
import demo.birdge.lights.impl.IncandescentLight;
import demo.birdge.switchs.BaseSwitch;
import demo.birdge.switchs.sub.RemoteControlSwitch;

public class ClientForBridge {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ILight iLight = new IncandescentLight();
		ILight cLight = new CrystalLight();
		
		
		BaseSwitch switch1 = new BaseSwitch(iLight);
		
		switch1.makeLight();
		
		RemoteControlSwitch switch2 = new RemoteControlSwitch(cLight);
		
		switch2.makeRemoteLight(3);
	}

}

猜你喜欢

转载自coolmagic1101.iteye.com/blog/2081473