您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“java中的橋接模式怎么用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“java中的橋接模式怎么用”吧!
消息分為普通消息,加急消息,特急消息多種,不同的消息類型,業(yè)務(wù)功能處理是不一樣的,現(xiàn)在要實現(xiàn)這樣發(fā)送提示消息的功能,該如何實現(xiàn)呢?
如何才能既實現(xiàn)功能,又能靈活地擴展呢?
橋接模式的定義:
將抽象部分與它的實現(xiàn)部分分離,使它們都可以獨立地變化。
Abstraction:抽象部分的接口,通常在這個對象中,要維護一個實現(xiàn)部分的對象引用,抽象對象里面的方法,需要調(diào)用實現(xiàn)部分的對象來完成。
RefinedAbstraction:擴展抽象部分的接口,通常在這些對象中,定義跟實際業(yè)務(wù)相關(guān)的方法。
Implementor:定義實現(xiàn)部分的接口,通常由Implementor接口提供基本的操作,Abstraction中定義的是基于這些基本操作的業(yè)務(wù)方法
concreteImplementor:真正實現(xiàn)Implementor接口的對象
//抽象部分就是各個消息的類型所對應(yīng)的功能,而實現(xiàn)部分就是各種發(fā)送消息的方式/**
* 實現(xiàn)發(fā)送消息的統(tǒng)一接口
*/public interface MessageImplementor {
/**
* 發(fā)送消息
* @param message 要發(fā)送的消息內(nèi)容
* @param toUser 把消息發(fā)送的目的人員
*/
public void send(String message,String toUser);
}/**
* 以站內(nèi)短消息的方式發(fā)送消息
*/public class MessageSMS implements MessageImplementor{
public void send(String message, String toUser) {
System.out.println("使用站內(nèi)短消息的方式,發(fā)送消息'"+message+"'給"+toUser);
}
}/**
* 以Email的方式發(fā)送消息
*/public class MessageEmail implements MessageImplementor{
public void send(String message, String toUser) {
System.out.println("使用Email的方式,發(fā)送消息'"+message+"'給"+toUser);
}
}/**
* 以手機短消息的方式發(fā)送消息
*/public class MessageMobile implements MessageImplementor{
public void send(String message, String toUser) {
System.out.println("使用手機短消息的方式,發(fā)送消息'"+message+"'給"+toUser);
}
}/**
* 抽象的消息對象
*/public abstract class AbstractMessage {
/**
* 持有一個實現(xiàn)部分的對象
*/
protected MessageImplementor impl; /**
* 構(gòu)造方法,傳入實現(xiàn)部分的對象
* @param impl 實現(xiàn)部分的對象
*/
public AbstractMessage(MessageImplementor impl){ this.impl = impl;
} /**
* 發(fā)送消息,轉(zhuǎn)調(diào)實現(xiàn)部分的方法
* @param message 要發(fā)送的消息內(nèi)容
* @param toUser 把消息發(fā)送的目的人員
*/
public void sendMessage(String message,String toUser){ this.impl.send(message, toUser);
}
}/**
* 普通消息
*/public class CommonMessage extends AbstractMessage{
public CommonMessage(MessageImplementor impl) { super(impl);
} public void sendMessage(String message, String toUser) { //對于普通消息,什么都不干,直接調(diào)用父類的方法,把消息發(fā)送出去就可以了
super.sendMessage(message, toUser);
}
}/**
* 加急消息
*/public class UrgencyMessage extends AbstractMessage{
public UrgencyMessage(MessageImplementor impl) { super(impl);
} public void sendMessage(String message, String toUser) {
message = "加急:"+message; super.sendMessage(message, toUser);
} /**
* 監(jiān)控某消息的處理過程
* @param messageId 被監(jiān)控的消息的編號
* @return 包含監(jiān)控到的數(shù)據(jù)對象,這里示意一下,所以用了Object
*/
public Object watch(String messageId) { //獲取相應(yīng)的數(shù)據(jù),組織成監(jiān)控的數(shù)據(jù)對象,然后返回
return null;
}
}/**
* 特急消息
*/public class SpecialUrgencyMessage extends AbstractMessage{
public SpecialUrgencyMessage(MessageImplementor impl) { super(impl);
} public void hurry(String messageId) { //執(zhí)行催促的業(yè)務(wù),發(fā)出催促的信息
} public void sendMessage(String message, String toUser) {
message = "特急:"+message; super.sendMessage(message, toUser); //還需要增加一條待催促的信息
}
}public class Client {
public static void main(String[] args) { //創(chuàng)建具體的實現(xiàn)對象
MessageImplementor impl = new MessageSMS(); //創(chuàng)建一個普通消息對象
AbstractMessage m = new CommonMessage(impl);
m.sendMessage("請喝一杯茶", "小李"); //創(chuàng)建一個緊急消息對象
m = new UrgencyMessage(impl);
m.sendMessage("請喝一杯茶", "小李"); //創(chuàng)建一個特急消息對象
m = new SpecialUrgencyMessage(impl);
m.sendMessage("請喝一杯茶", "小李"); //把實現(xiàn)方式切換成手機短消息,然后再實現(xiàn)一遍
impl = new MessageMobile();
m = new CommonMessage(impl);
m.sendMessage("請喝一杯茶", "小李");
m = new UrgencyMessage(impl);
m.sendMessage("請喝一杯茶", "小李");
m = new SpecialUrgencyMessage(impl);
m.sendMessage("請喝一杯茶", "小李");
}
}
1) 什么是橋接?為何需要橋接?如何橋接?
所謂橋接,通俗點就是在不同的東西之間搭一個橋,讓它們能夠連接起來,可以相互通訊和使用。
為被分離了的抽象部分和實現(xiàn)部分來搭橋,只要讓抽象部分擁有實現(xiàn)部分的接口對象,就橋接上了
為了達到讓抽象部分和實現(xiàn)部分都可以獨立變化的目的
抽象部分的實現(xiàn)通常是需要調(diào)用實現(xiàn)部分的功能來實現(xiàn)的
2) 繼承是擴展對象功能的一種常見手段,通常情況下,繼承擴展的功能變化維度都是一維的。
3)由誰來橋接:
就是誰來負(fù)責(zé)創(chuàng)建抽象部分和實現(xiàn)部分的關(guān)系,即誰來負(fù)責(zé)創(chuàng)建Implementor對象,并把它設(shè)置到抽象部分的對象中去。
- 由客戶端負(fù)責(zé)創(chuàng)建Implementor,并在創(chuàng)建抽象部分對象的時候,把它設(shè)置到抽象部分的對象中
- 可以抽象工廠或簡單工廠來選擇創(chuàng)建具體的Implementor對象,抽象部分的類可以通過工廠的方法來獲取Implementor對象
- 使用IOC/DI容器來創(chuàng)建具體的Implementor對象,并注入到Abstraction中
4) 典型的例子
JDBC:抽象部分是JDBC的API,具體實現(xiàn)式驅(qū)動程序
5)橋接模式的本質(zhì):分離抽象和實現(xiàn)
只有把抽象部分和實現(xiàn)部分分離開,才能夠讓它們獨立地變化。
到此,相信大家對“java中的橋接模式怎么用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。