本篇內(nèi)容主要講解“java中的橋接模式怎么用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“java中的橋接模式怎么用”吧!
創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)整合營銷推廣、網(wǎng)站重做改版、彰武網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5建站、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為彰武等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
消息分為普通消息,加急消息,特急消息多種,不同的消息類型,業(yè)務(wù)功能處理是不一樣的,現(xiàn)在要實(shí)現(xiàn)這樣發(fā)送提示消息的功能,該如何實(shí)現(xiàn)呢?
如何才能既實(shí)現(xiàn)功能,又能靈活地?cái)U(kuò)展呢?
橋接模式的定義:
將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化。
Abstraction:抽象部分的接口,通常在這個(gè)對象中,要維護(hù)一個(gè)實(shí)現(xiàn)部分的對象引用,抽象對象里面的方法,需要調(diào)用實(shí)現(xiàn)部分的對象來完成。
RefinedAbstraction:擴(kuò)展抽象部分的接口,通常在這些對象中,定義跟實(shí)際業(yè)務(wù)相關(guān)的方法。
Implementor:定義實(shí)現(xiàn)部分的接口,通常由Implementor接口提供基本的操作,Abstraction中定義的是基于這些基本操作的業(yè)務(wù)方法
concreteImplementor:真正實(shí)現(xiàn)Implementor接口的對象
//抽象部分就是各個(gè)消息的類型所對應(yīng)的功能,而實(shí)現(xiàn)部分就是各種發(fā)送消息的方式/**
* 實(shí)現(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);
}
}/**
* 以手機(jī)短消息的方式發(fā)送消息
*/public class MessageMobile implements MessageImplementor{
public void send(String message, String toUser) {
System.out.println("使用手機(jī)短消息的方式,發(fā)送消息'"+message+"'給"+toUser);
}
}/**
* 抽象的消息對象
*/public abstract class AbstractMessage {
/**
* 持有一個(gè)實(shí)現(xiàn)部分的對象
*/
protected MessageImplementor impl; /**
* 構(gòu)造方法,傳入實(shí)現(xiàn)部分的對象
* @param impl 實(shí)現(xiàn)部分的對象
*/
public AbstractMessage(MessageImplementor impl){ this.impl = impl;
} /**
* 發(fā)送消息,轉(zhuǎn)調(diào)實(shí)現(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)建具體的實(shí)現(xiàn)對象
MessageImplementor impl = new MessageSMS(); //創(chuàng)建一個(gè)普通消息對象
AbstractMessage m = new CommonMessage(impl);
m.sendMessage("請喝一杯茶", "小李"); //創(chuàng)建一個(gè)緊急消息對象
m = new UrgencyMessage(impl);
m.sendMessage("請喝一杯茶", "小李"); //創(chuàng)建一個(gè)特急消息對象
m = new SpecialUrgencyMessage(impl);
m.sendMessage("請喝一杯茶", "小李"); //把實(shí)現(xiàn)方式切換成手機(jī)短消息,然后再實(shí)現(xiàn)一遍
impl = new MessageMobile();
m = new CommonMessage(impl);
m.sendMessage("請喝一杯茶", "小李");
m = new UrgencyMessage(impl);
m.sendMessage("請喝一杯茶", "小李");
m = new SpecialUrgencyMessage(impl);
m.sendMessage("請喝一杯茶", "小李");
}
}
1) 什么是橋接?為何需要橋接?如何橋接?
所謂橋接,通俗點(diǎn)就是在不同的東西之間搭一個(gè)橋,讓它們能夠連接起來,可以相互通訊和使用。
為被分離了的抽象部分和實(shí)現(xiàn)部分來搭橋,只要讓抽象部分擁有實(shí)現(xiàn)部分的接口對象,就橋接上了
為了達(dá)到讓抽象部分和實(shí)現(xiàn)部分都可以獨(dú)立變化的目的
抽象部分的實(shí)現(xiàn)通常是需要調(diào)用實(shí)現(xiàn)部分的功能來實(shí)現(xiàn)的
2) 繼承是擴(kuò)展對象功能的一種常見手段,通常情況下,繼承擴(kuò)展的功能變化維度都是一維的。
3)由誰來橋接:
就是誰來負(fù)責(zé)創(chuàng)建抽象部分和實(shí)現(xiàn)部分的關(guān)系,即誰來負(fù)責(zé)創(chuàng)建Implementor對象,并把它設(shè)置到抽象部分的對象中去。
- 由客戶端負(fù)責(zé)創(chuàng)建Implementor,并在創(chuàng)建抽象部分對象的時(shí)候,把它設(shè)置到抽象部分的對象中
- 可以抽象工廠或簡單工廠來選擇創(chuàng)建具體的Implementor對象,抽象部分的類可以通過工廠的方法來獲取Implementor對象
- 使用IOC/DI容器來創(chuàng)建具體的Implementor對象,并注入到Abstraction中
4) 典型的例子
JDBC:抽象部分是JDBC的API,具體實(shí)現(xiàn)式驅(qū)動(dòng)程序
5)橋接模式的本質(zhì):分離抽象和實(shí)現(xiàn)
只有把抽象部分和實(shí)現(xiàn)部分分離開,才能夠讓它們獨(dú)立地變化。
到此,相信大家對“java中的橋接模式怎么用”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!