初学者硕枫设计模式系列之8 桥接模式

菜鸟硕枫设计模式系列之8 桥接模式
桥接模式将抽象部分与具体实现分离,使得都能独立的变化。它采用注入实现的方式来实现解耦的,而通常注入的行为只是被注入者行为的一部分。桥接模式也是一种结构型设计模式。

桥接模式类图:
           初学者硕枫设计模式系列之8 桥接模式


具体示例demo:

抽象消息
package bridgePattern;

public abstract class AbstractMessage {

	private MessageSending messageSending;
	private String msgContent;
	private String toUserName;
	public AbstractMessage(String msgContent, String toUserName,
			MessageSending messageSending){
		this.messageSending = messageSending;
	}
	
	public abstract void messageAction(String msgContent, String toUserName,
			MessageSending messageSending);
}


具体消息1:
package bridgePattern;

public class NormalMessage extends AbstractMessage{


	public NormalMessage(String msgContent, String toUserName,
			MessageSending messageSending) {
		super(msgContent, toUserName, messageSending);
		// TODO Auto-generated constructor stub
	}

	public void messageAction(String msgContent, String toUserName,
			MessageSending messageSending) {
		System.out.println("This is a normal message,send it as normal level");
		messageSending.sendMessage(msgContent, toUserName);
	}

}


具体消息2:
package bridgePattern;

public class UrgentMessage extends AbstractMessage{


	public UrgentMessage(String msgContent, String toUserName,
			MessageSending messageSending) {
		super(msgContent, toUserName, messageSending);
		// TODO Auto-generated constructor stub
	}

	public void messageAction(String msgContent, String toUserName,
			MessageSending messageSending) {
		System.out.println("This is a urgent message,send it as urgent level");
		messageSending.sendMessage(msgContent, toUserName);
	}

}


消息发送接口:
package bridgePattern;

public interface MessageSending {
	void sendMessage(String msgContent,String toUserName);
}


具体发送方式1:
package bridgePattern;

public class EmailMessageSending implements MessageSending{

	
	public void sendMessage(String msgContent, String toUserName) {
		
		System.out.println("Send "+msgContent+" "+toUserName+" "
				+"by EmailMessageSending");
		
	}

}


具体发送方式2:
package bridgePattern;

public class WangwangMessageSending implements MessageSending{

	
	public void sendMessage(String msgContent, String toUserName) {
		
		System.out.println("Send "+msgContent+" "+toUserName+" "
				+"by WangwangMessageSending");
		
	}

}


测试类:
package bridgePattern;

public class BridgeTest {

	public static void main(String[] args){
		MessageSending messageSending = new WangwangMessageSending();
		MessageSending messageSending2 = new EmailMessageSending();
		
		AbstractMessage message = new NormalMessage("hello,world",
				"lxy",messageSending);
		message.messageAction("hello,world", "lxy", messageSending);
		AbstractMessage message2 = new NormalMessage("hello,world",
				"lxy",messageSending2);
		message2.messageAction("hello,world", "lxy", messageSending2);
		
		AbstractMessage message3 = new UrgentMessage("hello,world",
				"lxy",messageSending);
		message3.messageAction("hello,world", "lxy", messageSending);
		AbstractMessage message4 = new UrgentMessage("hello,world",
				"lxy",messageSending2);
		message4.messageAction("hello,world", "lxy", messageSending2);
	}
}



说明:如果不采用桥接模式,可能就需要给每一种消息都要写不同的消息发送类型了,其实策略模式和桥接模式区别并不是十分大,往往大多数场合都有多种设计模式方式可以采用,设计模式的目的只是为了更好的解耦。