JavaScript设计模式(二):神奇的魔术师-简单的工厂模式

简介: 简单的工厂模式

简单工厂模式(Simple Factory)

又叫静态工厂方法,由一个工厂对象决定创建某一种产品对象类的实例。主要用来创建同一类对象.

非工厂模式 (每个提示框都是一个单独的类)

// 警示框
let AlertDialog = function (text) {
   
    this.show = function () {
   
        alert(text);
    }
}
// 提示框
let PromptDialog = function (text) {
   
    this.show = function () {
   
        prompt(text);
    }
}
// 确认框
let ConfirmDialog = function (text) {
   
    this.show = function () {
   
        confirm(text);
    }
}
let alertDialog = new AlertDialog('请检查输入的账号密码!');
let promptDialog = new PromptDialog('登录成功,请输入您的心情:');
let confirmDialog = new ConfirmDialog('确认取消删除操作!');

alertDialog.show();
let value = promptDialog.show();
let isOK = confirmDialog.show();

将以上代码转换为工厂模式

// 警示框
let AlertDialog = function (text) {
   
    this.show = function () {
   
        alert(text);
    }
}
// 提示框
let PromptDialog = function (text) {
   
    this.show = function () {
   
        prompt(text);
    }
}
// 确认框
let ConfirmDialog = function (text) {
   
    this.show = function () {
   
        confirm(text);
    }
}

/**
 * 提示框工厂
 * @param {string} type 提示框类型
 * @param {string} text 提示内容
 * @returns 提示框类的实例
 */
let DialogFactory = function (type, text) {
   
    switch (type) {
   
        // 警示框差异部分
        case 'alert':
            return new AlertDialog(text);
        // 提示框差异部分
        case 'prompt':
            return new PromptDialog(text);
        // 确认框差异部分
        case 'confirm':
            return new ConfirmDialog(text);
    }
}

// 无所谓使用不使用 new
let alertDialog = DialogFactory('alert', '请检查输入的账号密码!');
let promptDialog = new DialogFactory('prompt', '登录成功,请输入您的心情:');
let confirmDialog = DialogFactory('confirm', '确认取消删除操作!');

alertDialog.show();
let value = promptDialog.show();
let isOK = confirmDialog.show();

简单工厂模式 (抽象出相同的方法)

/**
 * 提示框工厂 - 抽象出相同的代码
 * @param {string} type 提示框类型
 * @param {string} text 提示内容
 */
let DialogFactory = function (type, text) {
   
    let dialog = null;
    switch (type) {
   
        // 警示框差异部分
        case 'alert':
            dialog = alert.bind(null, text);
            break;
        // 提示框差异部分
        case 'prompt':
            dialog = prompt.bind(null, text);
            break;
        // 确认框差异部分
        case 'confirm':
            dialog = confirm.bind(null, text);
            break;
    }
    this.show = dialog;
}

let alertDialog = new DialogFactory('alert', '请检查输入的账号密码!');
let promptDialog = new DialogFactory('prompt', '登录成功,请输入您的心情:');
let confirmDialog = new DialogFactory('confirm', '确认取消删除操作!');

alertDialog.show();
let value = promptDialog.show();
let isOK = confirmDialog.show();
目录
相关文章
|
4月前
|
设计模式 JavaScript 前端开发
js设计模式【详解】—— 职责链模式
js设计模式【详解】—— 职责链模式
76 8
|
4月前
|
设计模式 JavaScript 前端开发
js设计模式【详解】—— 组合模式
js设计模式【详解】—— 组合模式
52 7
|
1月前
|
设计模式 JavaScript 前端开发
JavaScript设计模式--访问者模式
【10月更文挑战第1天】
30 3
|
3月前
|
设计模式 JavaScript 前端开发
从工厂到单例再到策略:Vue.js高效应用JavaScript设计模式
【8月更文挑战第30天】在现代Web开发中,结合使用JavaScript设计模式与框架如Vue.js能显著提升代码质量和项目的可维护性。本文探讨了常见JavaScript设计模式及其在Vue.js中的应用。通过具体示例介绍了工厂模式、单例模式和策略模式的应用场景及其实现方法。例如,工厂模式通过`NavFactory`根据用户角色动态创建不同的导航栏组件;单例模式则通过全局事件总线`eventBus`实现跨组件通信;策略模式用于处理不同的表单验证规则。这些设计模式的应用不仅提高了代码的复用性和灵活性,还增强了Vue应用的整体质量。
50 1
|
3月前
|
设计模式 JavaScript 前端开发
小白请看 JS大项目宝典:设计模式 教你如何追到心仪的女神
小白请看 JS大项目宝典:设计模式 教你如何追到心仪的女神
|
4月前
|
设计模式 JavaScript Go
js设计模式【详解】—— 状态模式
js设计模式【详解】—— 状态模式
79 7
|
4月前
|
设计模式 JavaScript
js设计模式【详解】—— 桥接模式
js设计模式【详解】—— 桥接模式
67 6
|
4月前
|
设计模式 JavaScript
js设计模式【详解】—— 原型模式
js设计模式【详解】—— 原型模式
49 6
|
4月前
|
设计模式 JavaScript 算法
js设计模式【详解】—— 模板方法模式
js设计模式【详解】—— 模板方法模式
47 6
|
4月前
|
设计模式 存储 JavaScript
js设计模式【详解】—— 享元模式
js设计模式【详解】—— 享元模式
64 6