简单工厂模式(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();