zoukankan      html  css  js  c++  java
  • [设计模式] javascript 之 抽象工厂模式

    抽象工厂模式说明

     
    1. 工厂方法模式的问题: 在工厂方法模式里,创建类都需要通过 工厂类,如果要扩展程序,就必须修改工厂类,这违背了闭包原则,对扩展开放,对修改关闭;对于设计有一定的问题。
     
    2. 如何解决:就要用到抽象工厂模式,就是对功能类单独创建工厂类,这样就不必修改之前的代码,又扩展了功能。
     
    3. 工厂模式其实就是对 实现同一接口的 实现类 的 统一 工厂方式创建调用,但 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. 这里本来是创建工厂接口类,这里就去掉了; 直接创建各功能类工厂;
     
    1>. 邮件工厂类:
     
    function MailFactory() {
        
    }
    MailFactory.prototype.produce = function() {
        return new MailSender();
    }
    2>. 短信工厂类:
     
    function SmsFactory() {
        
    }
    SmsFactory.prototype.produce = function() {
        return new SmsSender();
    }
    4. 使用方法:
     
    var factory = new MailFactory();
    var sender = factory.produce();
    sender.to = 'toname#mail.com';
    sender.title = '抽象工厂模式';
    sender.content = '发送内容';
    sender.send();
    其他说明
     
    在面向对象语言如 java,.net C# 使用的工厂模式,都用到接口,接口是对外向各种用户暴露的可用方法,说明这个功能应用有些什么的方法应用,用户应该怎么用这个接口。对象以类的形式表现出来,代表现实世界中的某种抽象,也许场景会有很多类似的应用,比如上面的 邮件发送,短信发送,再比如商场中的各种促销手段,以及动物世界中的各种飞禽走兽等..
     
    如果我们不以接口形式提供用户使用,势必提供暴露真实的功能类对象给用户,用户可以随意对类对象进行修改跟扩展,这是不允许的。
     
    工厂方法模式 跟 抽象工厂模式可以很好的解决这样的问题,用户只能使用接口调用工厂类,来进行规定的操作;抽象工厂模式更进一步使用扩展功能变得容易,功能类跟工厂类都在实现相应的接口上实现各自类级别的扩展,不会涉及修改到其他的类或方法;
  • 相关阅读:
    BestCoder6 1002 Goffi and Squary Partition(hdu 4982) 解题报告
    codeforces 31C Schedule 解题报告
    codeforces 462C Appleman and Toastman 解题报告
    codeforces 460C. Present 解题报告
    BestCoder3 1002 BestCoder Sequence(hdu 4908) 解题报告
    BestCoder3 1001 Task schedule(hdu 4907) 解题报告
    poj 1195 Mobile phones 解题报告
    二维树状数组 探索进行中
    codeforces 460B Little Dima and Equation 解题报告
    通过Sql语句控制SQLite数据库增删改查
  • 原文地址:https://www.cnblogs.com/ranzige/p/4155872.html
Copyright © 2011-2022 走看看