Matlab工厂模式
工厂模式定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。工厂模式主要分为简单工厂模式、工厂方法模式以及抽象工厂模式。
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();
Matlab工厂模式的更多相关文章
- 23种设计模式--工厂模式-Factory Pattern
一.工厂模式的介绍 工厂模式让我们相到的就是工厂,那么生活中的工厂是生产产品的,在代码中的工厂是生产实例的,在直白一点就是生产实例的类,代码中我们常用new关键字,那么这个new出来的实例 ...
- javascript工厂模式和构造函数模式创建对象
一.工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程(本书后面还将讨论其他设计模式及其在JavaScript 中的实现).考虑到在ECMAScript 中无法创 ...
- PHP设计模式(三)抽象工厂模式(Abstract Factory For PHP)
一.什么是抽象工厂模式 抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象 ,而且使用抽象工厂模式还要满足以下条件: 系统中有多个产品族,而系统一次只可能消费其中一族产品. 同 ...
- PHP设计模式(一)简单工厂模式 (Simple Factory For PHP)
最近天气变化无常,身为程序猿的寡人!~终究难耐天气的挑战,病倒了,果然,程序猿还需多保养自己的身体,有句话这么说:一生只有两件事能报复你:不够努力的辜负和过度消耗身体的后患.话不多说,开始吧. 一.什 ...
- 设计模式之工厂模式VS抽象工厂
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...
- 菜鸟理解的工厂模式(Factory Pattern)是什么样子的?
直接开始说了,不浪费园友宝贵的时间! 什么是工厂模式? 在学习前,先问一下:"它是什么?". 工厂模式,它是项目里面常用的设计模式之一. 它是属于创建型模式,简单的理解创建型模式就 ...
- PHP 面向对象编程和设计模式 (3/5) - 单例模式和工厂模式
PHP高级程序设计 学习笔记 2014.06.11 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容 ...
- 《JS设计模式笔记》构造函数和工厂模式创建对象
工厂模式 function createPerson (name,age,job) { var o=new Object(); o.name=name; o.age=age; o.job=job; o ...
- 从接口、抽象类到工厂模式再到JVM来总结一些问题
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习! 涉及到的知识点总结如下: 为什么使用接口? 接口和抽象类的区别 简单工厂模式总结 Java中new和newInstance的区别 J ...
随机推荐
- R3300L Android相关的记录
在寻找高版本Android固件的过程中遇到一个Android6.0的固件, 刷上去之后发现没有Root. 因为原发布者设置了收费的QQ群, 固件开机图上就是QQ群号, 满以为交了钱之后应该能有Root ...
- Mockito 的用法
本文为博主原创,转载请注明出处: Mockito 是一个基于MIT协议的开源java测试框架. Mockito区别于其他模拟框架的地方主要是允许开发者在没有建立“预期”时验证被测系统的行为.对于moc ...
- SSL证书原理讲解
一直以来都对数字证书的签发,以及信任等事情一知半解.总算有个闲适的周末来总结和深入一下相关的知识. CA: CA(Certificate Authority)是证书的签发机构,它是负责管理和签发证书的 ...
- bootcss 之 .table-hover 类 鼠标悬停
通过添加 .table-hover 类可以让 <tbody> 中的每一行对鼠标悬停状态作出响应. <table class="table table-hover" ...
- idel上传代码到github时遇到的Push rejected: Push to origin/master was rejected
1 没有权限 2 先pull之后,再push即可
- Operation之结合操作符
startWith 该方法会在Observable序列开始之前插入一些事件元素. 即发生事件消息之前, 会发出这些预先插入的事件消息 Observable.of("2", &quo ...
- Django框架 + Djiango安装 + First Djiango + 常用命令
一.Django框架 MVC框架和MTV框架 参考:https://www.cnblogs.com/taosiyu/p/11260016.html MVC,全名是Model View Controll ...
- .NET 文件上传和文件接收
有时候,我们需要在后台端发起向指定的“文件接收接口”的文件传输请求,可以采用HttpWebRequest方式实现文件传输请求. 1.HttpWebRequest文件传输请求的代码如下: 其中,url为 ...
- Centos7个性化桌面美化
个人电脑系统由Windows转Kali(Linux)再转Windows,工作后因为都是接触的Centos7系统,再加上厌烦年Win10,于是再次投回LInux的怀抱,将电脑系统直接重装为Linux系统 ...
- [精] UBOOT2017+FIT 启动流程详尽分析
开发环境:Nanopi-neo-plus2 软件版本:uboot-2017 软件版本:linux-4.14 买这个板子有一段时间了,并没有全身心的投入在上面,有时间了的话就搞一搞, 这篇随笔算是对这个 ...