把抽象部分与实现部分分离,使得它们可以独立变化——这就是桥接模式
例如:发送信息,发送方式有用手机发送,用邮件发送,那么它的抽象就是发送方式;信息类型有广告类信息,也有私人信息,那么抽象部分就是信息类型。
下面给出这个例子的模拟代码:
/**
* 短信发送方式抽象类
*
* @author Administrator
*
*/
interface MessageSender
{
public void sendMessage();
}
/**
* 手机发信息
* @author Administrator
*
*/
class MobileSender implements MessageSender{
@Override
public void sendMessage()
{
System.out.println("使用手机方式发送信息!");
}
}
/**
* 邮件发信息
* @author Administrator
*
*/
class EmailSender implements MessageSender{
@Override
public void sendMessage()
{
System.out.println("使用邮件方式发送信息!");
}
}
/**
* 短信类型抽象类
*
* @author Administrator
*
*/
abstract class MessageType
{
protected MessageSender messageSender;
public MessageType(MessageSender messageSender)
{
this.messageSender = messageSender;
}
public abstract void sendMessage();
}
/**
* 广告类信息
* @author Administrator
*
*/
class ADMessage extends MessageType{
public ADMessage(MessageSender messageSender)
{
super(messageSender);
}
@Override
public void sendMessage()
{
this.messageSender.sendMessage();
System.out.println("消息类型为广告!\n");
}
}
/**
* 私人信息
* @author Administrator
*
*/
class PrivateMessage extends MessageType{
public PrivateMessage(MessageSender messageSender)
{
super(messageSender);
}
@Override
public void sendMessage()
{
this.messageSender.sendMessage();
System.out.println("消息类型为私人信息!\n");
}
}
/**
* 测试类
*
* @author Administrator
*
*/
public class Test
{
public static void main(String[] args)
{
MessageSender mobileSender = new MobileSender();
//用手机发一条广告信息
MessageType adMessage = new ADMessage(mobileSender);
adMessage.sendMessage();
//用手机发一条个人信息
MessageType privateMessage = new PrivateMessage(mobileSender);
privateMessage.sendMessage();
//用邮件发一条广告信息
MessageSender emailSender = new EmailSender();
adMessage = new ADMessage(emailSender);
adMessage.sendMessage();
//用邮件发一条个人信息
privateMessage=new PrivateMessage(emailSender);
privateMessage.sendMessage();
}
}
屏幕打印结果如下:
使用手机方式发送信息!
消息类型为广告!
使用手机方式发送信息!
消息类型为私人信息!
使用邮件方式发送信息!
消息类型为广告!
使用邮件方式发送信息!
消息类型为私人信息!