5. 抽象工厂模式

作者: 在宇宙Debugger | 来源:发表于2018-01-09 11:06 被阅读5次

设计模式并非是难以理解, 或是难以应用到实践中的, 相反的, 设计模式恰恰代表了某些场景下的最佳实践! 这些设计模式通常被有经验的开发者们所采用。
设计模式是开发者们在开发过程中面临的一般问题的解决方案。 这些解决方案是众多开发者们经过长时间的实验和错误所总结出来的
本文将讲解前端 (javascript) 的设计模式概念!


工厂模式是程序中相当常用的一种设计模式, 工厂模式在创建对象时, 无需指定创建对象的具体类, 原因是 工厂模式中定义了一个用于创建对象的接口, 这个接口决定了实例化哪一个子类, 而子类可以重写接口方法以便创建的时候指定自己的对象类型!

另外工厂模式不使用new来获取对象, 工厂模式分为2种, 第一种是简单工厂模式, 第二种是抽象工厂模式

抽象工厂模式

抽象工厂模式相对于简单工厂更加灵活, 因为它将方法都交给子类来完成, 本身并不提供任何方法

何时使用抽象工厂模式

  • 当处理很多共享相同属性的小型对象和组件时
  • 当需要根据所在不同环境来创建不同构造函数的实例时
  • 当每个子类方法的内部实现不同时

下面是一个简单的例子, 可以看出抽象工厂类AbstractFactory并不提供任何有效的方法, 方法都会被子类重写

// 抽象工厂类
function AbstractFactory() {};

// 虚方法
AbstractFactory.prototype.toName = function() {
    throw Error('抽象方法不能被调用!');
};

// 生产函数
AbstractFactory.factory = function(say) {
    var Say = AbstractFactory[say];
    if (Say) {
        return new Say;
    }
}

// 子类
AbstractFactory.SayHello = function() {
    this.name = 'hello';
}

// 子类的方法
AbstractFactory.SayHello.prototype = {
    toName: function() {
        return this.name;
    }
}

下面是一个适当的例子, 当工厂生产的子类的方法实现都截然不同, 但总体的逻辑是相同的时候, 比较适合抽象工厂模式

// 抽象工厂类
function Input() {};

// 虚方法
Input.prototype.getValue = function() {
    throw Error('抽象方法不能被调用!');
};

// 生产函数
Input.factory = function(type, option) {
    var input = Input[type];
    if (input) {
        return new input(option);
    }
}

// 子类
Input.Text = function(option) {
    if (option) {
        this.value = option.value;
    }
}

// 子类的方法
Input.Text.prototype = {
    getValue: function() {
        return 'text类型的value是' + this.value;
    }
}

// 子类
Input.Password = function(option) {
    if (option) {
        this.value = option.value;
    }
}

// 子类的方法
Input.Password.prototype = {
    getValue: function() {
        return 'password类型的value是' + this.value;
    }
}

var text = Input.factory('Text', {value: 'hello world!'});
var password = Input.factory('Password', {value: '123456'});
text.getValue(); // text类型的value是hello world!
password.getValue(); // password类型的value是123456

其他设计模式

单例模式: https://www.jianshu.com/p/4c0604f116ba
构造函数模式: https://www.jianshu.com/p/cf809d980459
建造者模式: https://www.jianshu.com/p/70cf4bb80549
简单工厂模式: https://www.jianshu.com/p/4293450926c2
装饰者模式: https://www.jianshu.com/p/16cf284ab810
外观模式: https://www.jianshu.com/p/179ae2a13c59

相关文章

  • 5. 抽象工厂模式

    设计模式并非是难以理解, 或是难以应用到实践中的, 相反的, 设计模式恰恰代表了某些场景下的最佳实践! 这些设计模...

  • 5.抽象工厂模式

    之前介绍了工厂模式的前两种:(文章链接:简单工厂模式 / 工厂方法模式)本篇介绍抽象工厂模式。 1、定义:提供一个...

  • Java设计模式

    //设计模式/** 创建型模式* 1.工厂模式* 2.抽象工厂模式* 3.单例模式* 4.建造者模式* 5.原型模...

  • 抽象工厂模式(选择产品簇)

    目录 回顾众多工厂模式 抽象工厂模式的理念 抽象工厂模式与工厂方法模式的差异 怎么来实现抽象工厂模式 抽象工厂模式...

  • 工厂模式

    工厂模式细分三种:简单工厂模式、工厂模式、抽象工厂模式。 工厂模式相当于抽象了简单工厂模式的工厂类,而抽象工厂模式...

  • 38种Javascript设计模式

    38种设计模式 1.简单工厂模式 2.工厂方法模式 3.抽象工厂模式 4.建造者模式 5.原型模式 6.单例模式 ...

  • 【抽象工厂模式】Abstract Factory Design

    抽象工厂模式 抽象工厂模式是**Creational **模式之一 抽象工厂模式和工厂模式很相似,甚至可以说抽象工...

  • Go 常用的设计模式

    1. 单例模式: 2. 简单工厂模式 3. 抽象工厂模式 它返回的是接口而不是结构体。 4. 工厂方法模式 5. ...

  • Java工厂模式详解--学习笔记

    目录1.概念2.角色3.工厂执行的具体流程简单工厂模式(静态工厂方法)工厂模式抽象工厂模式4.分类5.总结6.学习...

  • 第3章 创建型模式-抽象工厂模式

    ■ 抽象工厂模式的优点 ■ 抽象工厂模式的缺点 ■ 抽象工厂模式的使用场景 ■ 抽象工厂 AbstractFact...

网友评论

    本文标题:5. 抽象工厂模式

    本文链接:https://www.haomeiwen.com/subject/qblwnxtx.html