桥接模式
属于结构型模式
桥接模式将抽象和实现分离开来,各自独立,但能动态的结合;
为什么使用桥接模式
桥接模式基于类的最小设计原则, 通过使用封装、聚合及继承,让不同的类承担不同的职责;
将事物的抽象和实现分离, 从而保持各部分的独立性功能的扩展性;
使用桥接模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| public abstract class AbstractMessage { public AbstractMessage(MessageImplementor messageImplementor) { this.messageImplementor = messageImplementor; }
private MessageImplementor messageImplementor;
public void sendMessage(String message, String toUser){ this.messageImplementor.send(message,toUser); } }
public class DefaultMessage extends AbstractMessage { public DefaultMessage(MessageImplementor messageImplementor) { super(messageImplementor); }
@Override public void sendMessage(String message, String toUser) { super.sendMessage(message, toUser); } }
public class UrgencyMessage extends AbstractMessage { @Override public void sendMessage(String message, String toUser) { super.sendMessage("加急"+message, toUser); }
public UrgencyMessage(MessageImplementor messageImplementor) { super(messageImplementor); } }
public class ExpressMessage extends AbstractMessage { public ExpressMessage(MessageImplementor messageImplementor) { super(messageImplementor); }
@Override public void sendMessage(String message, String toUser) { super.sendMessage("特快"+message, toUser); } }
public interface MessageImplementor { void send(String message,String toUser); }
public class MessageMail implements MessageImplementor { @Override public void send(String message, String toUser) { System.out.println("用邮件给 "+toUser+" 发送: "+message); } }
public class MessageWeChat implements MessageImplementor { @Override public void send(String message, String toUser) { System.out.println("用微信给 "+toUser+" 发送: "+message); } }
@Test public void testBridging(){ AbstractMessage message1=new DefaultMessage(new MessageMail()); AbstractMessage message2=new DefaultMessage(new MessageWeChat()); AbstractMessage message3=new UrgencyMessage(new MessageMail()); AbstractMessage message4=new UrgencyMessage(new MessageWeChat()); AbstractMessage message5=new ExpressMessage(new MessageMail()); AbstractMessage message6=new ExpressMessage(new MessageWeChat()); message1.sendMessage("在吗","小明"); message2.sendMessage("在吗","小明"); message3.sendMessage("在吗","小明"); message4.sendMessage("在吗","小明"); message5.sendMessage("在吗","小明"); message6.sendMessage("在吗","小明"); }
|
Anything can go right will go right