假設我有一個uicontrolWrapper
類,它是uicontrol
(但不包含它的子類)的包裝。 uicontrol
的東西保存在uicontrolWrapper
的私人財產。基本上,我希望能夠對包裝器執行set/get
,並且調用將輸入uicontrol
。是否有這個設計模式的名稱(動態環繞另一個類)?
我可以這樣做:
classdef uicontrolWrapper < handle
properties (Access = private)
uic
end
properties (Dependent)
Style
String
Value
...
end
methods
function set.Style(obj, val)
obj.uic.Style = val;
end
function val = get.Style(obj)
val = obj.uic.Style;
end
...
end
但硬編碼像這顯然是很醜陋。
或者,我可以做dynamically generate properties dependent on what I'm trying to wrap:
classdef uicontrolWrapper < dynamicprops
properties (Access = private)
uic
end
methods
function obj = uicontrolWrapper(hObj)
obj.uic = hObj;
cellfun(@(prop) obj.createProperty(prop, fields(get(hObj));
end
function createProperty(obj, prop)
p = addprop(obj, prop);
p.Dependent = true;
p.SetMethod = @setUicontrolProp;
p.GetMethod = @getUicontrolProp;
function setUicontrolProp(obj, val)
obj.uic.(prop) = value;
end
function val = getUicontrolProp(obj)
val = obj.uic.(prop);
end
end
end
end
整點是,以避免不「深入到」物業我們正在努力調整違反Law of Demeter。
我不知道這是否是一種設計模式,但是當子類出於某種原因或其他不適當的原因使用這種類型的東西來包裝不同類型的對象時。 (例如,matlab.ui.control.UIControl
類是Sealed
,不能被分類。)這是否有實際名稱和預期的典型用途?
有點讓我想起[Decorator](http://www.oodesign.com/decorator-pattern.html)。它基本上爲您提供了向擴展類添加功能的可能性。不知道這是你的情況。之前從來沒有見過matlab,所以這對我來說是一種混淆。 – Bono 2015-02-23 14:30:46
爲什麼downvote?我很樂意編輯以更好地解決這個問題。 – 2015-02-23 14:33:42
不是我。我贊成反對,因爲這對我來說似乎是個很明確的問題。 – Bono 2015-02-23 14:34:59