• [设计模式] javascript 之 工厂方法模式


    1. 简单工厂模式

    说明:就是创建一个工厂类,里面实现了所对同一个接口的实现类的创建。

    但是好像JavaScript 好像没有 接口 这号东西,所以我们去掉接口这个层; 当然,我们这里的 实现类 下的成员变量,方法应该都是一样的;

    例如:这时举短信发送跟邮件发送的例子;
    1>. 邮件发送[实现]类

    function MailSender() {
        this.to = '';
        this.title = '';
        this.content = '';
    }
    
    MailSender.prototype.send = function() {
        //send body
    }

    2>. 短信发送[实现]类

    function SmsSender() {
        this.to = '';
        this.title = '';
        this.content = '';
    }
    
    SmsSender.prototype.send = function() {
        //send body
    }

    3. 创建一个工厂类:

    function SendFactory() {
        this.sender = null;
    }
    
    SendFactory.prototype.produce = function(type) {
        var me = this;
        if (type == 'mail') {
            me.sender = new MailSender();
        } else if (type == 'sms') {
            me.sender = new SmsSender();
        }
       return me.sender; }

    4. 使用这个工厂类:

    var factory = new SendFactory();
    var sender = factory.produce('mail'); //sms
    sender.to = 'toName#mail.com';
    sender.title = '邮件测试标题!';
    sender.content = '发送内容';
    sender.send();

    2. 多个工厂方法模式

    说明:多个工厂模式方法,是对普通工厂方法的改进,因为返回实现是依据传进去的字符返回,当字符输入错误,可能就无法处理,或是处理成错误的方式; 而多个工厂模式方法,就可以避免这样的错误;

    我们对上面的工厂类进行改进:

    function SendFactory() {
        this.sender = null;
    }
    
    SendFactory.prototype.produceMail = function() {
        var me = this;
        me.sender = new MailSender();
        return me.sender;
    }
    
    SendFactory.prototype.produceSms = function() {
        var me = this;
        me.sender = new SmsSender();
        return me.sender;
    }

    使用方法:

    var factory = new SendFactory();
    var sender = factory.produceSms(); //produceMail
    sender.to = 'toName#xxxxx';
    sender.title = '短信发送方法标题';
    sender.content = '发送内容';
    sender.send();

    3. 静态工厂方法模式

    说明:将上面的 多个工厂方法模式 的方法改为静态标识即可,使之不必对 SendFactory 进行实例化;

    将工厂类代码修改如下:

    var SendFactory = {
        produceMail : function() {
            return new MailSender();
        },
        produceSms : function() {
            return new SmsSender();
        }
    }

    使用方法:

    var sender = SendFactory.produceMail();
    sender.to = 'toName#mail.com';
    sender.title = '邮件发送标题';
    sender.content = '发送内容';
    sender.send();

    工厂方法模式说明 

    在面向对象思想编程说明,在具有很多产品(现实世界模型,名称:类名,成员属性,及操作方法等)需要初始化,即产品需要创建,并且[实现同一接口时],可以使用工厂方法模式; 第一种模式,有输入类型错误的可能,第二模式,需要用时即创建工厂实例;

  • 相关阅读:
    Hexo+Github 搭建一个自己的博客
    vue中sessionStorage存储的用法和问题
    vue 页面刷新
    vue渲染完页面后div滚动条定位在底部
    vue 定义全局函数
    vue filter过滤器用法
    vue中bus.$on事件被多次绑定
    vue中引入jQuery的方法
    vue2.0传值方式:父传子、子传父、非父子组件、路由跳转传参
    vue打包后显示为空白页的解决办法
  • 原文地址:https://www.cnblogs.com/editor/p/4152042.html
Copyright © 2020-2023  润新知