桥接模式

桥接模式

属于结构型模式

桥接模式将抽象和实现分离开来,各自独立,但能动态的结合;

为什么使用桥接模式

桥接模式基于类的最小设计原则, 通过使用封装、聚合及继承,让不同的类承担不同的职责;
将事物的抽象和实现分离, 从而保持各部分的独立性功能的扩展性;

使用桥接模式

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("在吗","小明");
}