Dan*_*hoa 6 oop matlab design-patterns
假设我有一个类uicontrolWrapper,它是a的包装器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
Run Code Online (Sandbox Code Playgroud)
但像这样的硬编码显然非常难看.
或者,我可以根据我想要包装的内容动态生成属性:
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
Run Code Online (Sandbox Code Playgroud)
重点是避免违反"得墨忒耳法则"而不是"触及"我们试图调整的财产.
我不知道这是否是一个设计模式,但是当子类化由于某种原因或另一个不合适时,我已经使用这种类型的东西来包装不同类型的对象.(例如,matlab.ui.control.UIControl该类是Sealed并且不能被子类化.)这是否具有实际名称和预期的典型用途?
| 归档时间: |
|
| 查看次数: |
1053 次 |
| 最近记录: |