工厂模式定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。工厂模式主要分为简单工厂模式、工厂方法模式以及抽象工厂模式。

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工厂模式的更多相关文章

  1. 23种设计模式--工厂模式-Factory Pattern

    一.工厂模式的介绍       工厂模式让我们相到的就是工厂,那么生活中的工厂是生产产品的,在代码中的工厂是生产实例的,在直白一点就是生产实例的类,代码中我们常用new关键字,那么这个new出来的实例 ...

  2. javascript工厂模式和构造函数模式创建对象

    一.工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程(本书后面还将讨论其他设计模式及其在JavaScript 中的实现).考虑到在ECMAScript 中无法创 ...

  3. PHP设计模式(三)抽象工厂模式(Abstract Factory For PHP)

    一.什么是抽象工厂模式 抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象 ,而且使用抽象工厂模式还要满足以下条件: 系统中有多个产品族,而系统一次只可能消费其中一族产品. 同 ...

  4. PHP设计模式(一)简单工厂模式 (Simple Factory For PHP)

    最近天气变化无常,身为程序猿的寡人!~终究难耐天气的挑战,病倒了,果然,程序猿还需多保养自己的身体,有句话这么说:一生只有两件事能报复你:不够努力的辜负和过度消耗身体的后患.话不多说,开始吧. 一.什 ...

  5. 设计模式之工厂模式VS抽象工厂

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...

  6. 菜鸟理解的工厂模式(Factory Pattern)是什么样子的?

    直接开始说了,不浪费园友宝贵的时间! 什么是工厂模式? 在学习前,先问一下:"它是什么?". 工厂模式,它是项目里面常用的设计模式之一. 它是属于创建型模式,简单的理解创建型模式就 ...

  7. PHP 面向对象编程和设计模式 (3/5) - 单例模式和工厂模式

    PHP高级程序设计 学习笔记 2014.06.11 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容 ...

  8. 《JS设计模式笔记》构造函数和工厂模式创建对象

    工厂模式 function createPerson (name,age,job) { var o=new Object(); o.name=name; o.age=age; o.job=job; o ...

  9. 从接口、抽象类到工厂模式再到JVM来总结一些问题

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习! 涉及到的知识点总结如下: 为什么使用接口? 接口和抽象类的区别 简单工厂模式总结 Java中new和newInstance的区别 J ...

随机推荐

  1. 列出python库的内置方法

    import cv dir(cv) ['16SC', '16UC', '32FC', '32SC', '64FC', '8SC', '8UC', 'Abs', 'AbsDiff', 'AbsDiffS ...

  2. 前端知识点回顾之重点篇——CSS中flex布局

    flex布局 来源: http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool 采用 Flex 布局的元素 ...

  3. SNF-软件开发机器人-免费-火爆登场-程序下载及实战配套教程免费发放

    软件开发机器人不辱使命的完成了在软件开发方面的方式方法,颠覆了传统开发,可零编程开发软件,也可二开更强大功能. 为了更好的了解和理解软件开发机器人我们以模拟用友u8系统部分供应链程序为例进行模拟. 联 ...

  4. mysql 日期自动自动添加及更新为当前时间

    1. 虽然mysql中日期时间类型比较多,但是支持默认值的类型只有timestamp,详见这里. 2. 希望新增记录时自动写入当前时间,建表语句如下: `create_time` timestamp ...

  5. 用python批量下载图片

    一 写爬虫注意事项 网络上有不少有用的资源, 如果需要合理的用爬虫去爬取资源是合法的,但是注意不要越界,前一阶段有个公司因为一个程序员写了个爬虫,导致公司200多个人被抓,所以先进入正题之前了解下什么 ...

  6. ARM 链接脚本分析

    分析连接脚本的语法规则 /* ---------------------------------------------------------------------------- * Memory ...

  7. Intelij idea 中文字体渲染异常解决方法

    当 Font 选择的字体无法渲染时,则尝试使用该选项所选择的字体渲染.

  8. python2 手动安装更新pip

    现在对于python2版本,直接修改python.exe名字为python2.exe,命令python2 -m pip install --upgrade pip --force-reinstall可 ...

  9. windows下tomcat日志的坑

    最近在调试工程,想着在windows下多开窗口操作方便,结果发现日志竟然不全,百思不得其解.最后发现竟然是部署的坑. 之前的部署都是在bin目录下运行service.bat安装服务后了事,启停都通过t ...

  10. 【loj6538】烷基计数 加强版 加强版 Burnside引理+多项式牛顿迭代

    别问我为啥突然刷了道OI题,也别问我为啥花括号不换行了... 题目描述 求含 $n$ 个碳原子的本质不同的烷基数目模 $998244353$ 的结果.$1\le n\le 10^5$ . 题解 Bur ...