裝飾設計模式和例題

文件復制程序:

將一個文件復制一份出來,實現方法很簡單,使用FileInputStream讀取文件內容,然后使用FileOutputStream寫入另一個文件,利用read方法的返回值作為while循環的條件,進行一邊讀一邊寫。

?

代碼示例:

c52fe6c2bab188bc0b7574fcb50ed967.png



統計連續的重復字節:

將連續5個以上重復的字節統計一下,并且將重復的數量和所有重復字節的總數量打印出來。

實現這個程序,主要思路是單個字節的讀取,每讀取一個字節就記錄下來,然后和下一次讀取的字節進行對比比否相等,相等代表重復。就再用一個count變量記錄重復的次數,如果不相等就代表不重復就需要把這個變量歸零重新記錄。還需要一個total變量來記錄每次重復的次數總和,只需要加個判斷條件,只要count大于等于5就令total+=count即可。

?

代碼示例:

b1bc1e02bc7642ebfc95c4ed42352475.png


運行結果:

f29e6b014f9182ca7c5f364fbffe4feb.png




裝飾設計模式:

裝飾設計模式,顧名思義就是給某樣東西、某個對象進行裝飾。裝飾設計模式可以利用繼承或實現接口的方式,給一個基礎的對象增加新的功能,就像一個毛坯房,可以通過裝修之后變成漂亮的房子,有點類似于能夠進行功能上的疊加。

下面以蛋糕為主題進行一個裝飾設計模式的過程:

代碼示例:

先使用一個接口定制好方法:

98e194bc72cf1e08dd8ec143770bc050.png



然后寫一個最基礎的類,在蛋糕里最基礎的類就是普通蛋糕了,在這個類里需要實現接口。

代碼示例:

ff7eb5faef3f65ccbb13f81b74f6cf94.png



接著就是其他可以以蛋糕這個類為基礎擴展的類,例如草莓蛋糕:

代碼示例:

b4a9bcac5cf144345b4fbfc592f74716.png



愿意的話可以寫任意個這樣的類,但是基本規則都是一樣:

? 代碼示例:

1339edec74551d6ab92005fade0cd7f5.png



體系寫完后,可以使用測試類測試效果:

? 代碼示例:

4ad92b9b49876092b46d2d6ef41adfed.png


運行結果:

8ccfcf2af2235c713659c6c4c827e246.png


再增加(裝飾)一個對象:

0ff230f3cc409e22605c05c08e1435d7.png


運行結果:

c18b088031f579cb55485bfb5788e027.png


可以增加任意個對象:

787ad5f32694d4530bdc4db1d5149247.png


運行結果:

dec0b714a4b58f6a23e5337e5f78b090.png


也可以只使用基礎類對象:

03546f7efcb029f5ca56416f83538b14.png


運行結果:

88e620728806f56100c6b80019b891dd.png



寫信的例題:

? 也是同樣先定義一個接口或者抽象類:

b5fe8b1be9c5882c17f33265abe39e31.png


然后再定義一個基礎實現類:

679bd6669b1b660b373847634f5c0d47.png


有些人喜歡在信件上噴點香水,所以可以寫一個香水的擴展類:

1847fc589950f673738f34f3f07b7737.png


如果寫的是情書,或許還需要一個吻印,那么就可以寫一個吻印的擴展類:

b1315ed96fc72bced06729f4ee006a9e.png


既然有吻印,自然得再加上幾個愛心桃,來給對方表達愛慕,那么就再寫一個愛心的擴展類:

25c3787aceaf2f40c272686d3f713dd0.png


完成后就可以在測試類里進行測試查看效果:

13ff3566d8991880efb23a58821cf0e2.png



運行結果:

813bde370d917577319fc111785b7066.png




本文轉自 ZeroOne01 51CTO博客,原文鏈接:http://blog.51cto.com/zero01/1976621,如需轉載請自行聯系原作者

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

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

相關文章

mysql操作手冊我_MySQL使用指南一

我將MySQL常用指令整理出來分享給大家。1. 列出所有數據庫mysql> show databases;2. 創建數據庫mysql> create databases MyStorage;3. 打開數據庫mysql> use MyStorage;4. 創建表mysql> create table Storage-> (-> id int,-> name varchar(50),-> pr…

谷歌地圖將很快顯示電動汽車充電站

If you’re out on the road in the future and find your electric vehicle is in dire need of a charge, you’ll soon be able to look to Google Maps for help finding a charging station. 如果您將來出門在外,并且發現您的電動汽車急需充電,那么…

JS4

1. js的本質就是處理數據。數據來自于后臺的數據庫。 所以變量就起到一個臨時存儲數據的作用。 ECMAScript制定了js的數據類型。 數據類型有哪些? 字符串 String數字 Number布爾 BooleanNull 空Undefined Object 對象Array 數組 json function …

ovirt官方安裝文檔 第三章

第3章:安裝oVirt 安裝oVirt引擎包 在您可以配置和使用oVirt引擎之前,您必須安裝 rhevm 包和依賴關系。 安裝oVirt引擎包 在開始安裝oVirt之前,添加官方倉庫: # yum install http://resources.ovirt.org/pub/yum-repo/ovirt-releas…

mysql獲取查詢策略語句_MySQL數據庫查詢性能優化策略

優化查詢使用Explain語句分析查詢語句Explain 用來分析 SELECT 查詢語句,開發人員可以通過分析 Explain 結果來優化查詢語句。通過對查詢語句的分析,可以了解查詢語句的執行情況,找出查詢語句執行的瓶頸,從而優化查詢語句.使用索引查詢MySql中提高性能的一個最有效的…

松弛變量可以為負嗎_如何為松弛安裝(非官方)暗模式

松弛變量可以為負嗎Slack still doesn’t have a dark mode. They have dark themes, but those only let you customize the sidebar colors, leaving the main window white. With the release of system-wide dark modes on macOS Mojave and Windows 10, Slack feels very …

如何使用系統自帶的日志轉儲功能logroate.存放應用日志

Linux日志服務介紹 1. 在Linux系統,大部分日志都是由syslog日志服務驅動和管理的 syslog服務由兩個重要的配置文件控制管理,分別是/etc/syslog.conf主配置文件和/etc/sysconfig/syslog輔助 配置文件, /etc/init.d/syslog是啟動腳本…

shell 多行注釋

:<<BLOCK 中間為要注釋的內容 BLOCK轉載于:https://www.cnblogs.com/S--S/p/9817660.html

natcat for mysql_用Navicat for mysql連接mysql報錯1251-解決辦法

TP框架連接mongodb報錯及解決辦法mongodb版本3.4.7 1.認證錯誤:Failed to connect to: localhost:27017: Authentication failed on database test ...Loadrunner參數化連接oracle、mysql數據源報錯及解決辦法Loadrunner參數化連接oracle.mysql數據源報錯及解決辦法 (本人系統是…

如何在Mac上設置FaceTime

FaceTime is Apple’s built-in video and audio calling app. It pairs with your iPhone and allows you to make phone calls on macOS. FaceTime是Apple的內置視頻和音頻通話應用程序。 它可以與iPhone配對使用&#xff0c;并允許您在macOS上撥打電話。 You don’t need an…

移動視頻技術

在語音通信已得到教育、醫療、社交、電子商務等多個領域的移動應用和充分發展的今天&#xff0c;人們已不滿足于僅依靠語音電話來傳達信息。開發者都需要結合自身業務場景在其產品中嵌入語音聊天、視頻通話、語音對講等實時通話功能。但較高的技術門檻和開發成本成為普通開發者…

hashlib 模塊用來進行hash

hashlib的基本概述&#xff1a; python中的 hashlib 模塊用來進行hash 或者md5加密&#xff0c;而且這種加密是不可逆的&#xff0c;所以這種算法又被稱為摘要算法&#xff0c; 其支持Opennssl庫提供的所有算法&#xff0c;包括 md5、sha1、sha224、sha256、sha512 等。 hash是…

在Ubuntu 11.10中將窗口按鈕移回右側

As of Ubuntu 10.04, the minimize, maximize, and close buttons on all windows were moved to the left side and the system menu was removed. Prior to version 11.10, you could use several methods to restore the original button arrangement. 從Ubuntu 10.04開始&a…

java測試開發_測試開發系類之Java常用知識點

測試需要的兩門語言&#xff1a;Java&#xff0c;Python測試開發&#xff1a;開發測試腳本->開發測試框架Java需要掌握內容&#xff1a;基礎語法、Java面向對象相關概念、Java常用類、基礎測試框架Java常用類&#xff1a;IO相關類&#xff0c;包括&#xff1a;字節流InputSt…

kafka 服務端消費者和生產者的配置

在kafka的安裝目錄下&#xff0c;config目錄下有個名字叫做producer.properties的配置文件 #指定kafka節點列表&#xff0c;用于獲取metadata&#xff0c;不必全部指定 #需要kafka的服務器地址&#xff0c;來獲取每一個topic的分片數等元數據信息。 metadata.broker.listkafka0…

如何在Windows 10上使用觸摸板手勢

If you’ve used a touchpad in Windows 10, you’re no doubt aware of the basic single-finger tapping and two-finger scrolling gestures. Windows 10 also packs in some additional gestures you might not have tried. 如果您在Windows 10中使用了觸摸板&#xff0c;那…

java全棧開發工程師_談談我對Java(J2EE)全棧工程師的理解

很多剛從事Java開發的同學都有一個疑問&#xff0c;到底是向全棧式程序員方向發展還是做精通某種技術的專才&#xff1f;對于這個問題也是見仁見智。 在給出我的觀點之前&#xff0c;我們先來分析一下全棧工程師的種類和專才的種類 &#xff0c;之后關于這個問題的答案就很清楚…

多網卡命名規則

使用iptables做nat路由&#xff0c;需要幾張網卡&#xff0c;以下命令很有用 1.首先你要先確認你系統加載的網卡&#xff0c;lspci|grep -i eth,如果出現unknow情況或者未識別&#xff0c;最好換網卡&#xff0c;或者是驅動沒有加載&#xff0c;需要到/lib/modules的子目錄driv…

相機模擬光圈_我的相機應該使用什么光圈?

相機模擬光圈Aperture, along with shutter speed and ISO, is one of the three most important settings you control when you take a photo. It affects both the amount of light that hits your camera sensor and the depth of field of your images. Let’s look at ho…

2018-2019-1 20165234 《信息安全系統設計基礎》第四周學習總結

一、學習目標 了解ISA抽象的作用 掌握ISA&#xff0c;并能舉一反三學習其他體系結構 了解流水線和實現方式二、學習內容 Y86-64指令 movq指令 irmovq rrmovq mrmovq rmmovq四個整數操指令 addq,subq,andq,xorq只對寄存器數據進行操作7個跳轉指令 cmovle cmovl cmove cmovne cmo…