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 ...
随机推荐
- 列出python库的内置方法
import cv dir(cv) ['16SC', '16UC', '32FC', '32SC', '64FC', '8SC', '8UC', 'Abs', 'AbsDiff', 'AbsDiffS ...
- 前端知识点回顾之重点篇——CSS中flex布局
flex布局 来源: http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool 采用 Flex 布局的元素 ...
- SNF-软件开发机器人-免费-火爆登场-程序下载及实战配套教程免费发放
软件开发机器人不辱使命的完成了在软件开发方面的方式方法,颠覆了传统开发,可零编程开发软件,也可二开更强大功能. 为了更好的了解和理解软件开发机器人我们以模拟用友u8系统部分供应链程序为例进行模拟. 联 ...
- mysql 日期自动自动添加及更新为当前时间
1. 虽然mysql中日期时间类型比较多,但是支持默认值的类型只有timestamp,详见这里. 2. 希望新增记录时自动写入当前时间,建表语句如下: `create_time` timestamp ...
- 用python批量下载图片
一 写爬虫注意事项 网络上有不少有用的资源, 如果需要合理的用爬虫去爬取资源是合法的,但是注意不要越界,前一阶段有个公司因为一个程序员写了个爬虫,导致公司200多个人被抓,所以先进入正题之前了解下什么 ...
- ARM 链接脚本分析
分析连接脚本的语法规则 /* ---------------------------------------------------------------------------- * Memory ...
- Intelij idea 中文字体渲染异常解决方法
当 Font 选择的字体无法渲染时,则尝试使用该选项所选择的字体渲染.
- python2 手动安装更新pip
现在对于python2版本,直接修改python.exe名字为python2.exe,命令python2 -m pip install --upgrade pip --force-reinstall可 ...
- windows下tomcat日志的坑
最近在调试工程,想着在windows下多开窗口操作方便,结果发现日志竟然不全,百思不得其解.最后发现竟然是部署的坑. 之前的部署都是在bin目录下运行service.bat安装服务后了事,启停都通过t ...
- 【loj6538】烷基计数 加强版 加强版 Burnside引理+多项式牛顿迭代
别问我为啥突然刷了道OI题,也别问我为啥花括号不换行了... 题目描述 求含 $n$ 个碳原子的本质不同的烷基数目模 $998244353$ 的结果.$1\le n\le 10^5$ . 题解 Bur ...