Java裝飾模式和代理模式是兩種常用的設計模式,用于在現有代碼基礎上增加新的功能。
裝飾模式旨在提供一種動態地給一個對象添加一些額外的職責的方法。它是以對客戶端透明的方式擴展對象功能的,對客戶端的影響是最小化的。以下是一個簡單的裝飾模式的實例:
public interface Component { void operation(); } public class ConcreteComponent implements Component { public void operation() { //...實現具體操作 } } public abstract class Decorator implements Component { private Component component; public Decorator(Component c) { component = c; } public void operation() { component.operation(); } } public class ConcreteDecorator extends Decorator { public ConcreteDecorator(Component c) { super(c); } public void operation() { super.operation(); addedBehavior(); } private void addedBehavior() { //...實現新增的功能 } }
代理模式則是為某個對象提供一個代理或占位符,以控制對該對象的訪問。通過代理對象可以在不改變目標對象的情況下,對目標對象進行一些控制,例如增加一些額外的訪問控制或緩存的邏輯。
public interface Subject { public void request(); } public class RealSubject implements Subject { public void request() { //...實現具體操作 } } public class Proxy implements Subject { private RealSubject realSubject; public Proxy() { realSubject = new RealSubject(); } public void request() { //在調用目標對象前的一些操作 realSubject.request(); //在調用目標對象后的一些操作 } }
裝飾模式和代理模式都可以用于動態地添加功能,它們之間的對比主要是在應用場景上的區別。一般來說,如果是需要對對象的行為進行擴展,且需要在運行時動態地添加新的行為,就可以采用裝飾模式;而如果是需要對對象進行一些控制,例如控制訪問權限或增加緩存機制,就可以采用代理模式。
上一篇css多列文字對齊
下一篇python的筆記本