【設計模式】7、橋接模式

橋接模式就是對一個類的方法進行抽象化,吧不相關的因素提取出來,發展出第二個類

?

?

 1 package com.shejimoshi.structural.Bridge;
 2 
 3 
 4 /**
 5  * 功能:橋接模式使用
 6  *       意圖:將抽象部分與它的實現部分分離,使他們都可以獨立的變化
 7  *     適用性:你不希望在抽象和它的實現部分之間有一個固定的綁定關系。
 8  *           類的抽象以及它的實現都應該可以通過生成子類的方法加以擴充
 9  *         對一個抽象的實現部分的修改應對客戶不產生影響,即客戶的代碼不必重新編譯
10  *         你想在多個對象間共享實現,但同時要求客戶并不知道這一點
11  * 時間:2016年2月17日下午7:45:10
12  * 作者:cutter_point
13  */
14 public abstract class Systeml
15 {
16     //相應系統的軟件
17     protected Soft soft;
18     
19     public abstract void using();
20     
21     public void installSoft(Soft soft)
22     {
23         this.soft = soft;
24     }
25 }

?

 1 package com.shejimoshi.structural.Bridge;
 2 
 3 
 4 /**
 5  * 功能:橋接模式使用
 6  *       意圖:將抽象部分與它的實現部分分離,使他們都可以獨立的變化
 7  *     適用性:你不希望在抽象和它的實現部分之間有一個固定的綁定關系。
 8  *           類的抽象以及它的實現都應該可以通過生成子類的方法加以擴充
 9  *         對一個抽象的實現部分的修改應對客戶不產生影響,即客戶的代碼不必重新編譯
10  *         你想在多個對象間共享實現,但同時要求客戶并不知道這一點
11  * 時間:2016年2月17日下午7:54:12
12  * 作者:cutter_point
13  */
14 public class Window extends Systeml
15 {
16     //默認構造函數
17     public Window(){}
18     
19     public Window(Soft soft)
20     {
21         //給系統安裝相應的軟件
22         this.soft = soft;
23     }
24     
25     @Override
26     public void using()
27     {
28         System.out.print("Window 系統運行:");
29         soft.run();//系統運行相應的軟件
30     }
31     
32 }

?

 1 package com.shejimoshi.structural.Bridge;
 2 
 3 
 4 /**
 5  * 功能:橋接模式使用
 6  *       意圖:將抽象部分與它的實現部分分離,使他們都可以獨立的變化
 7  *     適用性:你不希望在抽象和它的實現部分之間有一個固定的綁定關系。
 8  *           類的抽象以及它的實現都應該可以通過生成子類的方法加以擴充
 9  *         對一個抽象的實現部分的修改應對客戶不產生影響,即客戶的代碼不必重新編譯
10  *         你想在多個對象間共享實現,但同時要求客戶并不知道這一點
11  * 時間:2016年2月17日下午7:57:12
12  * 作者:cutter_point
13  */
14 public class Linux extends Systeml
15 {
16     //默認構造函數
17     public Linux(){}
18     
19     public Linux(Soft soft)
20     {
21         //給系統安裝相應的軟件
22         this.soft = soft;
23     }
24     
25     @Override
26     public void using()
27     {
28         System.out.print("Linux 系統運行:");
29         soft.run();//系統運行相應的軟件
30     }
31 
32 }

?

 1 package com.shejimoshi.structural.Bridge;
 2 
 3 
 4 /**
 5  * 功能:橋接模式使用
 6  *       意圖:將抽象部分與它的實現部分分離,使他們都可以獨立的變化
 7  *     適用性:你不希望在抽象和它的實現部分之間有一個固定的綁定關系。
 8  *           類的抽象以及它的實現都應該可以通過生成子類的方法加以擴充
 9  *         對一個抽象的實現部分的修改應對客戶不產生影響,即客戶的代碼不必重新編譯
10  *         你想在多個對象間共享實現,但同時要求客戶并不知道這一點
11  * 時間:2016年2月17日下午7:52:58
12  * 作者:cutter_point
13  */
14 public interface Soft
15 {
16     public void run();
17 }

?

 1 package com.shejimoshi.structural.Bridge;
 2 
 3 
 4 /**
 5  * 功能:編譯器
 6  * 時間:2016年2月17日下午7:58:17
 7  * 作者:cutter_point
 8  */
 9 public class Compiler implements Soft
10 {
11 
12     @Override
13     public void run()
14     {
15         System.out.println("運行編譯器");
16     }
17 
18 }

?

 1 package com.shejimoshi.structural.Bridge;
 2 
 3 
 4 /**
 5  * 功能:瀏覽器
 6  * 時間:2016年2月17日下午8:00:09
 7  * 作者:cutter_point
 8  */
 9 public class Browser implements Soft
10 {
11 
12     @Override
13     public void run()
14     {
15         System.out.println("運行瀏覽器");
16     }
17 
18 }

?

 1 package com.shejimoshi.structural.Bridge;
 2 
 3 
 4 /**
 5  * 功能:測試橋接模式
 6  * 時間:2016年2月17日下午8:06:05
 7  * 作者:cutter_point
 8  */
 9 public class Test
10 {
11     public static void main(String[] args)
12     {
13         //我們的軟件
14         Soft browser = new Browser();
15         Soft compiler = new Compiler();
16         
17         //我們在window系統上安裝瀏覽器使用
18         Systeml win = new Window();
19         win.installSoft(browser);
20         win.using();
21         
22         System.out.println("===============================");
23         //Linux 上安裝瀏覽器還要編譯器
24         Systeml ubuntu = new Linux(browser);
25         ubuntu.using();
26         ubuntu.installSoft(compiler);
27         ubuntu.using();
28         
29     }
30 }

測試結果:

?

Window 系統運行:運行瀏覽器
===============================
Linux 系統運行:運行瀏覽器
Linux 系統運行:運行編譯器

  

?

轉載于:https://www.cnblogs.com/cutter-point/p/5196456.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458316.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458316.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458316.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

hadoop HA 之 QJM

前言 本文主要通過對hadoop2.2.0集群配置的過程加以梳理,所有的步驟都是通過自己實際測試。文檔的結構也是根據自己的實際情況而定,同時也會加入自己在實際過程遇到的問題。搭建環境過程不重要,重要點在于搭建過程中遇到的問題,解…

TeamViewer免費版和付費版有什么不同

提到遠程控制軟件 TeamViewer無疑是目前業內知名度比較高的一款,所以說到遠程控制軟件可能大部分人首先想到的就是TeamViewer。在使用功能上,它支持遠程桌面控制、文件傳輸、遠程計算機鎖定、視頻會話、主控方和被控方身份互換,遠程管理無人執…

iOS-關于cell的重疊問題

記得很早之前遇到過一個問題,關于cell的重疊問題,現在回顧總結一下。 iOS中tableview的cell顯示是會消耗內存的,如果要顯示無數個cell,不可能把每個cell都存儲下來,為了解決這個問題,cell就用了重用機制&am…

每天一個Linux命令-ls

ls 命令在linux系統中是使用頻率最頻繁的幾個命令之一,直接使用不帶目錄名,是默認顯示當前目錄的文件及子目錄名稱,ls加指定目錄名,則可以查看指定目錄下的文件及子目錄名稱,ls不僅可以查看目錄下有哪些文件和子目錄,還…

halcon資料鏈接

本文轉載自xiamentingtao,原文地址如下: http://blog.csdn.net/xiamentingtao/article/details/52583787 1目錄(?)[]論壇培訓博客文檔書籍視頻論壇、培訓halcon學習網:http://www.ihalcon.com/鳥叔機器視覺:http://bbs.szvbt.com…

【代碼筆記】iOS-翻書效果的實現

代碼: RootViewController.m #import "RootViewController.h"interface RootViewController ()endimplementation RootViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {self [super initWithNibName:…

修改TFS與本地源代碼映射路徑

使用源代碼管理資源管理器修改工作區 在“文件”菜單上單擊“源代碼管理”,再單擊“工作區”。 在“管理工作區”對話框的“名稱”列下,突出顯示要修改的工作區,然后單擊“編輯”。 在“編輯工作區”對話框中: 修改“名稱”框中…

halcon基礎知識

一、程序中的顏色: 綠色:注釋 褐色:控制開發 淺藍色:外部函數——HDevelop函數文件,可在所有Halcon程序中使用 深藍色:圖像獲取和處理 紫色:內部函數——本地程序函數,只在當前程序使…

停止過度設計,開發客戶需要的軟件

在與許多不同的團隊合作過之后,Greg Young發現大家做項目時經常會大幅度的過度設計。比如一個預計要開發9個月的項目,換個角度思考一下,卻可能只需要幾個星期就可以提交95%的功能。Young在最近倫敦舉行的DDD eXchange大會上著重闡述了這一點。…

Halcon—Tuple中符號的含義

2014年08月08日 21:20:30閱讀數:5429實例一(3d_coordinates.hdev):for I : 1 to NumImages by 1read_image (Image, calib/calib-3d-coord-I$02d)——C:\Program Files\MVTec\HALCON-10.0\images\的calib文件夾中開頭是calib-3d-c…

如果我是博客園的產品經理【上】

題記 這是一個系列文章的第一篇 我打算寫一個《如果我是XXX的產品經理》系列, 因為我是博客園的老用戶了,這個系列又是寫在博客園上的 所以先拿博客園開刀, 后面估計還會寫QQ音樂,有道云筆記,github,foxmai…

Halcon學習筆記(三)---數據類型

Halcon學習筆記(三)---數據類型halcon只能在單獨行進行注釋,不能在語句后面進行注釋。1、tuple(元組,重數)賦值符號“:”tuple算子:(1)變量定義與加減乘除運算代碼如下:*…

論文筆記之:RATM: RECURRENT ATTENTIVE TRACKING MODEL

RATM: RECURRENT ATTENTIVE TRACKING MODEL ICLR 2016 本文主要內容是 結合 RNN 和 attention model 用來做目標跟蹤。 其中模型的組成主要是: 1. an attention model 主要用來從輸入圖像中提取 patch; 2. RNN 用來預測 attention 參數,即&am…

【分享】WeX5的正確打開方式(5)——綁定機制

今天繼續WeX5的綁定機制。 需求分析 記賬本要實現的效果就是可以展示所有賬單,還能實時動態編輯每一筆賬單,官方案例的效果圖如下: 展示頁: 編輯頁 個人覺得官方案例加入了許多元素,不熟悉的同學每一個點都很難理解&am…

HALCON常用算子(HALCON13.0)

HALCON常用算子(HALCON13.0)Chapter 9--Developdev_clear_window ( : : : )功能:清除活動圖形窗口的內容dev_close_window ( : : : )功能:關閉活動圖形窗口。dev_display ( Object : : : )功能:在現有圖形窗口中顯示圖…

關于未捕獲異常的處理(WPF)

轉載自:http://www.cnblogs.com/chenxizhang/p/3280947.html 這一篇文章來談談對于WPF應用程序開發中的未捕獲異常的處理。 首先,我們當然是要求應用程序開發人員,盡可能地在程序可能出現異常的地方都去捕捉異常,使用try…catch的…

設計模式--23、訪問者模式

訪問者模式是一種較為復雜的行為型設計模式,它包含訪問者和被訪問元素兩個主要組成部分,這些被訪問的元素通常具有不同的類型,且不同的訪問者可以對它們進行不同的訪問操作。例如處方單中的各種藥品信息就是被訪問的元素,而劃價人…

C#串口SerialPort常用屬性方法

SerialPort(): //屬性 .BaudRate;獲取或設置波特率 .BytesToRead;得到 接收到數據的字節數 .BytesToWrites;得到送往串口的字節數 .DataBits;獲取或設置數據位 .IsOpen;獲取一個值,判斷串口是否打開 .Pariy;獲取或設置校驗位 .PortName;串口名稱 .ReadBufferSize;獲…

NTFS文件系統的簡述

NTFS文件系統的設計思想基于穩定性、和安全性并支持大容量存儲設備的文件系統:1.它提供日志可以增加文件系統的容錯率,可以有效的保護系統的安全。NTFS是一個可恢復的文件系統。在NTFS分區上即使強制關機后,一般也不需要運行CHKDSK命令修復磁…

Rxjava基礎

現在很多Android App的開發開始使用Rxjava,但是Rxjava以學習曲線陡峭著稱,入門有些困難。經過一段時間的學習和使用,這里來介紹一下我對Rxjava的理解。 說到Rxjava首先需要了解的兩個東西,一個是Observable(被觀察者&a…