您好,登錄后才能下訂單哦!
本文源碼:GitHub·點這里 || GitEE·點這里
橋梁模式是對象的結構模式。又稱為柄體(Handle and Body)模式或接口(Interface)模式。橋梁模式的用意是“將抽象化(Abstraction)與實現化(Implementation)脫耦,使得二者可以獨立地變化”。
1)、場景分析
在一個復雜的系統中,消息通知是一個必備模塊,一般封裝方式主要從下面兩個方式入手:
用戶端消息(user-client)
管理端消息(system-client)
郵件發送(email)
短信發送(msg)
2)、場景圖解
3)、源碼實現
/**
* 橋接模式場景應用
*/
public class C01_InScene {
public static void main(String[] args) {
// 創建具體的實現對象
MsgImplementor implementor = new SendBySMS() ;
// 創建普通的消息對象
AbstractMsg abstractMessage = new UserMsg(implementor);
abstractMessage.sendMessage("您的賬戶異地登陸", "用戶A0001");
// 切換為郵件方式且加急處理
implementor = new SendByEmail() ;
abstractMessage = new AdminMsg(implementor);
abstractMessage.sendMessage("項目上線通知", "運維S0001");
}
}
/**
* 封裝消息類型
*/
abstract class AbstractMsg {
// 持有一個實現部分的對象
MsgImplementor impl ;
public AbstractMsg (MsgImplementor impl){
this.impl = impl ;
}
/**
* 發送消息,委派給實現部分的方法
* @param message 要發送消息的內容
* @param toUser 消息的接受者
*/
public void sendMessage (String message, String toUser){
this.impl.send(message, toUser);
}
}
class AdminMsg extends AbstractMsg{
public AdminMsg(MsgImplementor impl) {
super(impl);
}
@Override
public void sendMessage(String message, String toUser) {
message = "辛苦的管理員:"+message;
super.sendMessage(message, toUser);
}
}
class UserMsg extends AbstractMsg{
public UserMsg(MsgImplementor impl) {
super(impl);
}
@Override
public void sendMessage(String message, String toUser) {
message = "尊敬的用戶:" + message ;
super.sendMessage(message, toUser);
}
}
/**
* 封裝消息發送
*/
interface MsgImplementor {
void send (String message , String toUser) ;
}
class SendBySMS implements MsgImplementor{
@Override
public void send(String message, String toUser) {
System.out.println("短信通知:"+toUser+";內容:"+message);
}
}
class SendByEmail implements MsgImplementor{
@Override
public void send(String message, String toUser) {
System.out.println("郵件通知:"+toUser+";內容:"+message);
}
}
抽象化(Abstraction)角色
抽象化給出的定義,并保存一個對實現化對象的引用。
修正抽象化(RefinedAbstraction)角色
擴展抽象化角色,改變修正父類對抽象化的定義。
實現化(Implementor)角色
這個角色給出實現化角色的接口,但不給出具體的實現。
這個角色給出實現化角色接口的具體實現。
abstract class Abstraction {
private Implementor implementor ;
public Abstraction (Implementor implementor){
this.implementor = implementor ;
}
// 實例方法
public void operation (){
implementor.operationImpl();
}
}
class RefinedAbstraction extends Abstraction{
public RefinedAbstraction(Implementor implementor) {
super(implementor);
}
//其他的操作方法
public void otherOperation(){
}
}
abstract class Implementor {
// 示例方法,實現抽象部分需要的某些具體功能
public abstract void operationImpl () ;
}
class ConcreteImplementorA extends Implementor{
@Override
public void operationImpl() {
System.out.println("ConcreteImplementorA.operationImpl()");
}
}
class ConcreteImplementorB extends Implementor{
@Override
public void operationImpl() {
System.out.println("ConcreteImplementorB.operationImpl()");
}
}
橋梁模式在Java應用中的一個非常典型的例子就是JDBC驅動器。抽象API可以對各種數據庫引擎發出SQL指令,并不直接與數據庫引擎互動,JDBC驅動器負責這個底層的工作。
JDBC的這種架構,把抽象部分和具體部分分離開來,從而使得抽象部分和具體部分都可以獨立地擴展。
GitHub·地址
https://github.com/cicadasmile/model-arithmetic-parent
GitEE·地址
https://gitee.com/cicadasmile/model-arithmetic-parent
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。