Java裝飾器設(shè)計(jì)模式初探
本篇隨筆主要介紹用Java實(shí)現(xiàn)簡(jiǎn)單的裝飾器設(shè)計(jì)模式:
先來(lái)看一下裝飾器設(shè)計(jì)模式的類(lèi)圖:
從圖中可以看到,我們可以裝飾Component接口的任何實(shí)現(xiàn)類(lèi),而這些實(shí)現(xiàn)類(lèi)也包括了裝飾器本身,裝飾器本身也可以再被裝飾。
下面是用Java實(shí)現(xiàn)的簡(jiǎn)單的裝飾器設(shè)計(jì)模式,提供的是從基本的加入咖啡入手,可以繼續(xù)加入牛奶,巧克力,糖的裝飾器系統(tǒng)。
interface Component { void method(); } class Coffee implements Component { @Override public void method() { // TODO Auto-generated method stub System.out.println("倒入咖啡"); } } class Decorator implements Component { public Component comp; public Decorator(Component comp) { this.comp = comp; } @Override public void method() { // TODO Auto-generated method stub comp.method(); } } class ConcreteDecorateA extends Decorator { public Component comp; public ConcreteDecorateA(Component comp) { super(comp); this.comp = comp; } public void method1() { System.out.println("倒入牛奶"); } public void method2() { System.out.println("加入糖 "); } public void method() { super.method(); method1(); method2(); } } class ConcreteDecorateB extends Decorator { public Component comp; public ConcreteDecorateB(Component comp) { super(comp); this.comp = comp; } public void method1() { System.out.println("加入巧克力"); } public void method() { super.method(); method1(); } } public class TestDecoratePattern { public static void main(String[] args) { Component comp = new Coffee(); comp.method(); System.out.println("--------------------------------------------------"); Component comp1 = new ConcreteDecorateA(comp); comp1.method(); System.out.println("--------------------------------------------------"); Component comp2 = new ConcreteDecorateB(comp1); comp2.method(); System.out.println("--------------------------------------------------"); Component comp3 = new ConcreteDecorateB(new ConcreteDecorateA(new Coffee())); comp3.method(); System.out.println("--------------------------------------------------"); Component comp4 = new ConcreteDecorateA(new ConcreteDecorateB(new Coffee())); comp4.method(); } }
運(yùn)行結(jié)果:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java并發(fā)內(nèi)存模型詳情
- Java并發(fā)編程之阻塞隊(duì)列深入詳解
- Java 淺談 高并發(fā) 處理方案詳解
- Java并發(fā)編程之線(xiàn)程中斷
- Java并發(fā)編程之threadLocal
- Java實(shí)現(xiàn)計(jì)算器設(shè)計(jì)
- Java中轉(zhuǎn)換器設(shè)計(jì)模式深入講解
- Java編程Iterator迭代器設(shè)計(jì)原理及實(shí)現(xiàn)代碼示例
- Java裝飾器設(shè)計(jì)模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- 淺談Java并發(fā)之同步器設(shè)計(jì)
相關(guān)文章
springboot如何重定向攜帶數(shù)據(jù) RedirectAttributes
這篇文章主要介紹了springboot如何重定向攜帶數(shù)據(jù) RedirectAttributes,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09Java實(shí)現(xiàn)MD5加密及解密的代碼實(shí)例分享
如果對(duì)安全性的需求不是太高,MD5仍是使用非常方便和普及的加密方式,比如Java中自帶的MessageDigest類(lèi)就提供了支持,這里就為大家?guī)?lái)Java實(shí)現(xiàn)MD5加密及解密的代碼實(shí)例分享:2016-06-06JPA如何將查詢(xún)結(jié)果轉(zhuǎn)換為DTO對(duì)象
這篇文章主要介紹了JPA如何將查詢(xún)結(jié)果轉(zhuǎn)換為DTO對(duì)象,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02Spring實(shí)現(xiàn)源碼下載編譯及導(dǎo)入IDEA過(guò)程圖解
這篇文章主要介紹了Spring實(shí)現(xiàn)源碼下載編譯及導(dǎo)入IDEA,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07SpringBoot通過(guò)參數(shù)注解自動(dòng)獲取當(dāng)前用戶(hù)信息的方法
這篇文章主要介紹了SpringBoot通過(guò)參數(shù)注解自動(dòng)獲取當(dāng)前用戶(hù)信息的方法,文中使用HandlerMethodArgumentResolver 類(lèi)來(lái)實(shí)現(xiàn)這個(gè)功能,并通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下2024-03-03springboot控制層傳遞參數(shù)為非必填值的操作
這篇文章主要介紹了springboot控制層傳遞參數(shù)為非必填值的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10