Matlab工厂模式
程序员文章站
2022-04-15 15:53:47
工厂模式定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。工厂模式主要分为简单工厂模式、工厂方法模式以及抽象工厂模式。 Obj.m Object1.m Object2.m 简单工厂模式: SimpleFactory.m 测试代码: 工厂方法模式: Metho ......
工厂模式定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。工厂模式主要分为简单工厂模式、工厂方法模式以及抽象工厂模式。
obj.m
classdef obj < handle
methods
function desc(~)
end
end
end
object1.m
classdef object1 < obj
methods
function desc(~)
disp('this is object1 class');
end
end
end
object2.m
classdef object2 < obj
methods
function desc(~)
disp('this is object2 class');
end
end
end
简单工厂模式:
simplefactory.m
classdef simplefactory
methods
function res = createobject(~,obj_name)
if strcmp(obj_name,'object1')
res = object1();
elseif strcmp(obj_name,'object2')
res = object2();
else
res = object.empty();
end
end
function res = createobjecteval(~,obj_name)
res = eval(obj_name);
end
function res = createobjectstr2func(~,obj_name)
conshandle = str2func(obj_name);
res = conshandle();
end
function res = createobject1(~)
res = object1();
end
function res = createobject2(~)
res = object2();
end
end
methods(static)
function res = createobjectstatic(obj_name)
if strcmp(obj_name,'object1')
res = object1();
elseif strcmp(obj_name,'object2')
res = object2();
else
res = object.empty();
end
end
end
end
测试代码:
%简单工厂模式
fac = simplefactory();
obj1 = fac.createobject('object1');
obj1.desc();
obj2 = fac.createobject('object2');
obj2.desc();
%通过eval函数
fac = simplefactory();
obj1 = fac.createobjecteval('object1');
obj1.desc();
obj2 = fac.createobjecteval('object2');
obj2.desc();
%通过str2func函数
fac = simplefactory();
obj1 = fac.createobjectstr2func('object1');
obj1.desc();
obj2 = fac.createobjectstr2func('object2');
obj2.desc();
%静态工厂模式
obj1 = simplefactory.createobjectstatic('object1');
obj1.desc();
obj2 = simplefactory.createobjectstatic('object2');
obj2.desc();
%多方法工厂模式
fac = simplefactory();
obj1 = fac.createobject1();
obj1.desc();
obj2 = fac.createobject2();
obj2.desc();
工厂方法模式:
methodfactory.m
classdef methodfactory
methods(abstract)
factorymethod(~);
end
methods
function dosomething(obj)
disp('this is method factory!')
o = obj.factorymethod();
o.desc();
end
end
end
methodfactory1.m
classdef methodfactory1 < methodfactory
methods
function res = factorymethod(~)
res = object1();
end
end
end
methodfactory2.m
classdef methodfactory2 < methodfactory
methods
function res = factorymethod(~)
res = object2();
end
end
end
测试代码:
%工厂方法模式
fac1 = methodfactory1();
fac1.dosomething();
fac2 = methodfactory2();
fac2.dosomething();
抽象工厂模式:
ifactory.m
classdef ifactory
methods(abstract)
createobject(~);
end
end
obj1factory.m
classdef obj1factory < ifactory
methods
function res = createobject(~)
res = object1();
end
end
end
obj2factory.m
classdef obj2factory < ifactory
methods
function res = createobject(~)
res = object2();
end
end
end
测试代码
fac1 = obj1factory();
obj1 = fac1.createobject();
obj1.desc();
fac2 = obj2factory();
obj2 = fac2.createobject();
obj2.desc();
上一篇: day08