Java裝飾器設(shè)計(jì)模式初探
本篇隨筆主要介紹用Java實(shí)現(xiàn)簡(jiǎn)單的裝飾器設(shè)計(jì)模式:
先來看一下裝飾器設(shè)計(jì)模式的類圖:

從圖中可以看到,我們可以裝飾Component接口的任何實(shí)現(xiàn)類,而這些實(shí)現(xiàn)類也包括了裝飾器本身,裝飾器本身也可以再被裝飾。
下面是用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é)果:

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java并發(fā)內(nèi)存模型詳情
- Java并發(fā)編程之阻塞隊(duì)列深入詳解
- Java 淺談 高并發(fā) 處理方案詳解
- Java并發(fā)編程之線程中斷
- 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-09
Java實(shí)現(xiàn)MD5加密及解密的代碼實(shí)例分享
如果對(duì)安全性的需求不是太高,MD5仍是使用非常方便和普及的加密方式,比如Java中自帶的MessageDigest類就提供了支持,這里就為大家?guī)鞪ava實(shí)現(xiàn)MD5加密及解密的代碼實(shí)例分享:2016-06-06
JPA如何將查詢結(jié)果轉(zhuǎn)換為DTO對(duì)象
這篇文章主要介紹了JPA如何將查詢結(jié)果轉(zhuǎn)換為DTO對(duì)象,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
Spring實(shí)現(xiàn)源碼下載編譯及導(dǎo)入IDEA過程圖解
這篇文章主要介紹了Spring實(shí)現(xiàn)源碼下載編譯及導(dǎo)入IDEA,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
SpringBoot通過參數(shù)注解自動(dòng)獲取當(dāng)前用戶信息的方法
這篇文章主要介紹了SpringBoot通過參數(shù)注解自動(dòng)獲取當(dāng)前用戶信息的方法,文中使用HandlerMethodArgumentResolver 類來實(shí)現(xiàn)這個(gè)功能,并通過代碼示例講解的非常詳細(xì),需要的朋友可以參考下2024-03-03
springboot控制層傳遞參數(shù)為非必填值的操作
這篇文章主要介紹了springboot控制層傳遞參數(shù)為非必填值的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10

