java設計模式之裝飾模式

裝飾模式:又名包裝(Wrapper)模式,裝飾模式以對客戶端透明的方式擴展對象的功能,是繼承關系的一個替代方案。
裝飾模式可以在不創造更多的子類的模式下,將對象的功能加以擴展。

經典代碼:

//裝飾模式interface Phone {public abstract void call();
}class Iphone implements Phone {public void call() {System.out.println("手機可以打電話了");}
}abstract class PhoneDecorate implements Phone{private Phone p;public PhoneDecorate(Phone p){this.p=p;}public void call(){this.p.call();}
}class RingPhoneDecorate extends PhoneDecorate{public RingPhoneDecorate(Phone p){super(p);}public void call(){System.out.println("手機可以聽彩鈴了");super.call();}
}class MusicPhoneDecorate extends PhoneDecorate{public MusicPhoneDecorate(Phone p){super(p);}public void call(){super.call();System.out.println("手機可以聽音樂了");}
}class PhoneDemo{public static void main(String[] args){Phone p = new Iphone();p.call();System.out.println("----------------");PhoneDecorate pd = new RingPhoneDecorate(p);pd.call();System.out.println("----------------");pd = new RingPhoneDecorate(new MusicPhoneDecorate(p));pd.call();}
}

運行結果:

手機可以打電話了

手機可以聽彩鈴了
手機可以打電話了

手機可以聽彩鈴了
手機可以打電話了
手機可以聽音樂了

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

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

相關文章

Hibernate與 MyBatis的比較

第一章 Hibernate與MyBatis Hibernate 是當前最流行的O/R mapping框架,它出身于sf.net,現在已經成為Jboss的一部分。 Mybatis 是另外一種優秀的O/R mapping框架。目前屬于apache的一個子項目。 MyBatis 參考資料官網:http://www.mybatis.or…

面試題之實現1分2分5分組成2角問題

三種硬幣,用數學排列組合的思想,就是從3種不同的物品中選擇然后再組合,當然每種物品選擇的數量是變化的,所以就設定1分的數量為i,2分的數量為j,5分的數量為k.接著再想想,因為最終的結果是2角,也就是20分&am…

java設計模式之模板模式

模板模式是類的行為模式。準備一個抽象類,將部分邏輯以具體方法以及具體構造函數的形式實現,然后聲明一些抽象方法來迫使子類實現剩余的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩余的邏輯有不同的實現。這就是模板方法模式…

Java 代碼性能優化

代碼優化,一個很重要的課題。可能有些人覺得沒用,一些細小的地方有什么好修改的,改與不改對于代碼的運行效率有什么影響呢?這個問題我是這么考慮的,就像大海里面的鯨魚一樣,它吃一條小蝦米有用嗎&#xff1…

20個常用的正則表達式

正則表達式——古老而又強大的文本處理工具。僅用一段簡短的表達式語句,就能快速地實現一個復雜的業務邏輯。掌握正則表達式,讓你的開發效率有一個質的飛躍。 正則表達式經常被用于字段或任意字符串的校驗,比如下面這段校驗基本日期格式的Jav…

Mysql處理海量數據時的一些優化查詢速度方法

由于在參與的實際項目中發現當mysql表的數據量達到百萬級時,普通SQL查詢效率呈直線下降,而且如果where中的查詢條件較多時,其查詢速度簡直無法容忍。曾經測試對一個包含400多萬條記錄(有索引)的表執行一條條件查詢&…

八大排序算法的Python實現

1、插入排序 描述 插入排序的基本操作就是將一個數據插入到已經排好序的有序數據中,從而得到一個新的、個數加一的有序數據,算法適用于少量數據的排序,時間復雜度為O(n^2)。是穩定的排序方法。插入算法把要排序的數組分成兩部分:第…

重定向和請求轉發的區別

一次重定向的過程 我的代碼里面已經寫好了,redirectAndFoward.jsp頁面上有一個表單,表單重定向到redirectAndFowardTarget.jsp,那么這一次的重定向過程為: 1、以指定方式(表單看method,直接URL發起就是GE…

hibernate映射關系的配置

XML文件個人書寫規范 <!-- users屬性&#xff0c;本類與User的一對多關系 --> 格式&#xff1a;&#xff1f;屬性&#xff0c;本類與&#xff1f;的&#xff1f; ?1 屬性名 ?2 關聯對類型 ?3 關系配置模板 多對一&#xff1a; <many-to-one name…

公司創始人、董事長、CEO和總裁誰更大,有什么區別?

創始人 英文稱Founder&#xff0c;創始人是一個企業&#xff0c;社團&#xff0c;基金、組織&#xff0c;網站等的發起和創立人。任正非是華為的創始人。如果公司一開始就有多個人就叫聯合創始人。比如騰訊有馬化騰張志東等5位聯合創始人&#xff0c;阿里巴巴則有馬云、張英等1…

JQuery中的一些重要方法

選擇上一級元素 parent(expr) 選擇所有上級元素(前輩) parents(expr) 選擇下一級元素 children(expr) 選擇所有后代元素 find(expr) 選擇同級元素(兄弟) siblings(expr) 選擇兄元素(前一個) prev( expr ) 選…

各種數據庫分頁查詢sql語句

1.oracle數據庫分頁 select * from (select a.*,rownum rc from 表名 where rownum<endrow) a where a.rc>startrow; 2.DB2數據庫分頁 Select * from (select rownumber() over() as rc,a.* from (select * from 表名 order by 列名) as a) …

Java線程面試題 Top 53

1) 什么是線程&#xff1f; 線程是操作系統能夠進行運算調度的最小單位&#xff0c;它被包含在進程之中&#xff0c;是進程中的實際運作單位。程序員可以通過它進行多處理器編程&#xff0c;你可以使用多線程對運算密集型任務提速。比如&#xff0c;如果一個線程完成一個任務要…

EL表達式的11個內置對象

EL是JSP內置的表達式語言 JSP2.0開始&#xff0c;不讓再使用Java腳本&#xff0c;而是使用EL表達式和動態標簽來代替Java腳本 EL替代的是<%... %>&#xff0c;也就是說EL只能做輸出 EL可以輸出的東西都在11個內置對象中&#xff0c;11個內置對象&#xff0c;其中10個是…

xml的約束

為什么需要約束&#xff1f; 比如現在定義一個person的xml文件&#xff0c;只想要這個文件里面保存人的信息&#xff0c;比如name age等&#xff0c;但是如果在xml文件中寫了一個標簽<貓>&#xff0c;發現可以正常顯示&#xff0c;因為符合語法規范。但是貓肯定不…

會話跟蹤技術之Cookie

1 Cookie概述 1.1 什么叫Cookie Cookie翻譯成中文是小甜點&#xff0c;小餅干的意思。在HTTP中它表示服務器送給客戶端瀏覽器的小甜點。其實Cookie就是一個鍵和一個值構成的&#xff0c;隨著服務器端的響應發送給客戶端瀏覽器。然后客戶端瀏覽器會把Cookie保存起來&#xff…

會話跟蹤技術之HttpSession

1 HttpSession概述 1.1 什么是HttpSesssion javax.servlet.http.HttpSession接口表示一個會話&#xff0c;我們可以把一個會話內需要共享的數據保存到HttSession對象中&#xff01; 1.2 獲取HttpSession對象 HttpSession request.getSesssion()&#xff1a;如果當前會話已…

Spring MVC 中 HandlerInterceptorAdapter的使用

一般情況下&#xff0c;對來自瀏覽器的請求的攔截&#xff0c;是利用Filter實現的&#xff0c;這種方式可以實現Bean預處理、后處理。 Spring MVC的攔截器不僅可實現Filter的所有功能&#xff0c;還可以更精確的控制攔截精度。 spring為我們提供了org.springframework.web.ser…

Nginx安裝教程

1 nginx安裝環境 nginx是C語言開發&#xff0c;建議在linux上運行&#xff0c;本教程使用Centos6.5作為安裝環境。 --gcc 安裝nginx需要先將官網下載的源碼進行編譯&#xff0c;編譯依賴gcc環境&#xff0c;如果沒有gcc環境&#xff0c;需要安裝gcc&#xff1a;yum install gcc…

Maven Scope取值的含義

maven依賴關系中Scope的作用 Dependency Scope 在POM 4中&#xff0c;<dependency>中還引入了<scope>&#xff0c;它主要管理依賴的部署。目前<scope>可以使用5個值&#xff1a; * compile&#xff0c;缺省值&#xff0c;適用于所有階段&#xff0c;會…