zoukankan      html  css  js  c++  java
  • 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();
    

      

  • 相关阅读:
    iOS 开发网络篇—监测网络状态
    再杀掉app之后 删除NSUserDefault存在本地的数据
    iOS开发之duplicate symbols for architecture x86_64错误
    iOS中UITextField输入判断小数点后两位
    ios 适配iOS11&iPhoneX的一些坑
    iOS UITextView 设置 NSLinkAttributeName 属性,点击链接跳转
    iOS- UITextView与键盘回收与键盘遮挡输入框
    iOS 实现单个页面支持横竖屏,其他页面只能竖屏
    iOS最新Mac OS X 10.11之后 安装cocoapods及使用详解
    一种简单的登录加密方案
  • 原文地址:https://www.cnblogs.com/usaddew/p/10864666.html
Copyright © 2011-2022 走看看