Angenommen, ich habe eine Klasse uicontrolWrapper
, die ein Wrapper für eine uicontrol
ist (aber keine Unterklasse). Das uicontrol
Zeug ist in einem Privatbesitz für uicontrolWrapper
gehalten. Grundsätzlich möchte ich set/get
gegen den Wrapper tun können, und Anrufe würden in uicontrol
eingegeben werden.Gibt es einen Namen für dieses Entwurfsmuster (dynamisch um eine andere Klasse wickeln)?
konnte ich dies tun:
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
, aber ich mag diese hartzucodieren offensichtlich ziemlich hässlich ist.
Oder ich dynamically generate properties dependent on what I'm trying to wrap tun könnte:
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
Der springende Punkt ist die Law of Demeter durch nicht „erreicht in“ Eigentum zu vermeiden, verletzen wir anzupassen versuchen.
Ich weiß nicht, ob dies ein Design-Muster ist, aber ich habe diese Art der Sache verwendet, um Objekte verschiedener Typen zu umhüllen, wenn das Unterklassen-Unterfangen aus irgendeinem Grund unpassend ist. (Zum Beispiel ist die matlab.ui.control.UIControl
Klasse Sealed
und kann nicht unterklassifiziert werden.) Hat diese einen tatsächlichen Namen und beabsichtigte typische Verwendung?
Art erinnert mich an die [Decorator] (http://www.oodedesign.com/decorator-pattern.html). Es gibt Ihnen grundsätzlich die Möglichkeit, der erweiterten Klasse Funktionalität hinzuzufügen. Nicht sicher, ob das dein Fall ist. Ich habe Matlab noch nie zuvor gesehen, daher ist es etwas verwirrend für mich zu lesen. – Bono
Warum der Downvote? Ich würde gerne bearbeiten, um diese Frage besser zu machen. –
War ich nicht. Ich habe gegen den Downvote aufgestanden, weil es für mich eine klare Frage ist. – Bono