1. 程式人生 > 實用技巧 >Decorator(裝飾者)模式

Decorator(裝飾者)模式

1.Decorator模式解決什麼問題?
2.實現Decorator模式
3.小結

#Decorator模式解決什麼問題?
定義:裝飾模式指的是在不必改變原類檔案和使用繼承的情況下,動態地擴充套件一個物件的功能。它是通過建立一個包裝物件,也就是裝飾來包裹真實的物件。

java.io包也是基於此模式組織程式碼,學習Decorator程式碼能幫助理解IO包

#實現Decorator模式
為了練手,我們來模擬電腦外設接入電腦主機,也就是用外設來裝飾電腦

首先定義一個Computer的抽象類

package com.mike.pattern.decorator.eg1;

/**
 * @author mike
 * @date 2020-11-24
 * @desc 定義被裝飾者
 */
public abstract class Computer {
	public abstract void connectingDevices();
}

被裝飾者具體實現及初始資訊

package com.mike.pattern.decorator.eg1;

/**
 * @author mike
 * @date 2020-11-24
 * @desc 定義被裝飾者具體實現
 */
public class Desktop extends Computer {
	public void connectingDevices() {
		System.out.println("當前未連線任何外接裝置");
	}
}

裝飾者

package com.mike.pattern.decorator.eg1;

/**
 * @author mike
 * @date 2020-11-24
 * @desc 定義裝飾者
 */
public abstract class Decorator extends Computer {
	public Computer computer;
	public Decorator(Computer computer) {
		this.computer = computer;
	}

	public void connectingDevices() {
		computer.connectingDevices();
	}
}

滑鼠裝飾類

package com.mike.pattern.decorator.eg1;

/**
 * @author mike
 * @date 2020-11-23
 * @desc 定義滑鼠裝飾
 */
public class DecoratorMouse extends Decorator {
	public DecoratorMouse(Computer computer) {
		super(computer);
	}

	@Override
	public void connectingDevices() {
		super.connectingDevices();
		System.out.println("滑鼠已經連結");
	}
}

鍵盤裝飾類

package com.mike.pattern.decorator.eg1;

/**
 * @author mike
 * @date 2020-11-23
 * @desc 定義鍵盤裝飾器
 */
public class DecoratorKeybord extends Decorator {
	public DecoratorKeybord(Computer computer) {
		super(computer);
	}

	@Override
	public void connectingDevices() {
		super.connectingDevices();
		System.out.println("鍵盤已經連結");
	}
}

測試類

package com.mike.pattern.decorator.eg1;

/**
 * @author mike
 * @date 2020-11-23
 * @desc 測試裝飾
 */
public class Test {
	public static void main(String[] args) {
		Desktop desktop = new Desktop();
		Decorator decorator = new DecoratorKeybord(new DecoratorMouse(desktop));
		decorator.connectingDevices();
	}
}

輸出

#小結
學習設計模式最好的辦法是先打好基礎,尤其是有關,抽象類,介面方面的知識,加上多使用IDE斷點除錯功能,分析程式碼呼叫鏈,別人的文章只能給你指路,設計模式屬於只能意會沒法言傳的一類知識,自己多思考,多敲程式碼才能體會其思想。

參考文章:https://blog.csdn.net/jason0539/article/details/22713711