JS "eval智能" 工厂模式
<script>
var Shop = function () {
this.name = function () { document.write("商店的名字 <br/>"); },
this.local = function () { document.write("商店的位置 <br/>"); }
}; var ToolShop = function () {
ToolShop.convertASThis.constructor.call(this);
this.kind = function () { document.write("卖工具的商店 <br/>"); },
this.time = function () { document.write("工具商店营业时间8:00~16:00 <br/>"); }
}; var PetShop = function () {
PetShop.convertASThis.constructor.call(this);
this.kind = function () { document.write("卖猫狗的商店 <br/>"); },
this.time = function () { document.write("营业时间9:00~15:00 <br/>"); }
}; extend(ToolShop, Shop);
extend(PetShop, Shop); //========================================================= var Fish_ToolShop = function () {
Fish_ToolShop.convertASThis.constructor.call(this);
this.material = function () { document.write("钓鱼所用的材料! <br/>"); };
} var Repair_ToolShop = function () {
Repair_ToolShop.convertASThis.constructor.call(this);
this.material = function () { document.write("修理所用的材料! <br/>"); };
} extend(Repair_ToolShop, ToolShop);
extend(Fish_ToolShop, ToolShop); //========================================================= //智能工厂,动态实例化商店
var ShopFactory = {
Init: function (shopName) {
var tmpObj = eval("new " + shopName + "();");
return tmpObj;
}
}; //========================================================= //不同的工具商店可能存在多种不同类型的工具,所以存在一个商店的父类但是不能被实例化,需要在子类中重写
var FatherToolShop = function () {
this.sellTool = function (kind) {
throw new Error('this is a abstract class');
};
}; //这个对象继承FatherToolShop后重写sellTool来来进行实例
var OtherToolShop = function () { };
extend(OtherToolShop, FatherToolShop); //继承之后将原型链中的sellTool方法重写
OtherToolShop.prototype.sellTool = function (kind) {
var kind = kind;
var kinds = ["Repair_ToolShop", "Fish_ToolShop"]; for (var v in kinds) {
if (kinds[v] == kind) {
kind = ShopFactory.Init(kind);
kind.kind(); //工具商店
kind.time(); //营业时间
break;
}
}
return kind;
}; //========================================================= var test = new OtherToolShop();
test.sellTool("Repair_ToolShop").material();
test.sellTool("Fish_ToolShop").material();
</script>
JS "eval智能" 工厂模式的更多相关文章
- JS设计模式--简单工厂模式
在JS中创建对象会习惯的使用new关键字和类构造函数(也是可以用对象字面量). 工厂模式就是一种有助于消除两个类依赖性的模式. 工厂模式分为简单工厂模式和复杂工厂模式,这篇主要讲简单工厂模式. 简单工 ...
- [JS设计模式]:工厂模式(3)
简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定的情况. 说的通俗点,就像公司茶水间的饮料 ...
- JS设计模式之工厂模式
1 什么是工厂模式? 工厂模式是用来创建对象的一种最常用的设计模式.我们不暴露创建对象的具体逻辑,而是将将逻辑封装在一个函数中,那么这个函数就可以被视为一个工厂.工厂模式根据抽象程度的不同可以分为: ...
- JS面向对象之工厂模式
js面向对象 什么是对象 "无序属性的集合,其属性可以包括基本值.对象或者函数",对象是一组没有特定顺序的的值.对象的没个属性或方法都有一个俄名字,每个名字都映射到一个值. 简单来 ...
- js设计模式:工厂模式、构造函数模式、原型模式、混合模式
一.js面向对象程序 var o1 = new Object(); o1.name = "宾宾"; o1.sex = "男"; o1.a ...
- js简单的工厂模式
<!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...
- JS中的工厂模式
.一个栗子: var BicycleShop = function(){}; BicycleShop.prototype = { sellBicycle : function( model ){ va ...
- JS设计模式——7.工厂模式(示例-XHR)
XHR工厂 基本实现 var AjaxHandler = new Interface('AjaxHandler', ['request', 'createXHR']); var SimpleHandl ...
- JS设计模式——7.工厂模式(概念)
工厂模式 本章讨论两种工厂模式: 简单工厂模式 使用一个类(通常是一个单体)来生成实例. 使用场景:假设你想开几个自行车商店(创建自行车实例,组装它,清洗它,出售它),每个店都有几种型号的自行车出售. ...
随机推荐
- PostgreSQL分布式架构之——PL/Proxy
1. PL/Proxy的介绍 1.1 PL/Proxy概述 PL/Proxy是一款能在PostgreSQL数据库实现数据库水平拆分的软件:可以理解分布式架构(shared nothing);但是不是真 ...
- windows防火墙设置端口开放技巧
选择“打开或者关闭windows防火墙”把防火墙打开,然后选择“高级设置”,选择“创建规则”来指定端口.(这里也可以在“入站规则”里选择已经存在的端口.) 指定ip开放3389端口 某新服务器,开放8 ...
- 流程控制与数组——Java疯狂讲义
顺序结构 if分支语句 if{} 可以有多个else if{} else{} 可以省略 switch分支语句 while循环 do while循环 for循环 嵌套循环 控制循环结构 理解数 ...
- Linux下getsockopt/setsockopt 函数说明
[ getsockopt/setsockopt系统调用 功能描述: 获取或者设置与某个套接字关联的选 项.选项可能存在于多层协议中,它们总会出现在最上面的套接字层.当操作套接字选项时,选项位于的层和 ...
- 微信小程序实例源码大全2
wx-gesture-lock 微信小程序的手势密码 WXCustomSwitch 微信小程序自定义 Switch 组件模板 WeixinAppBdNovel 微信小程序demo:百度小说搜索 sh ...
- 【小程序+thinkphp5】 用户登陆,返回第三方session3rd
服务器环境: centos7 php7.0 准备工作: 注册小程序,并获取 appid .appsecret 下载微信解密算法sdk : https://mp.weixin.qq.com/debu ...
- 在centos7 ubuntu15.04 上通过bosh-lite 搭建单机环境cloudfoundry
Bosh-lite简介 bosh-lite 是一个单机部署cloudfoundry的实验性工具,用于开发人员做poc 验证.Bosh-lite目前支持仅MAC OS X和Linux系统.B ...
- 深入理解 Neutron -- OpenStack 网络实现(1):GRE 模式
问题导读1.什么是VETH.qvb.qvo?2.qbr的存在的作用是什么?3.router服务的作用是什么? 如果不具有Linux网络基础,比如防火墙如何过滤ip.端口或则对openstack ovs ...
- Linux 下如何安装 .bin 文件
拿到 .bin 文件,在文件所在目录下执行如下命令即可安装, ./your-file-name.bin 如果提示 “没有那个文件或目录” ,给它加上执行权限即可,执行如下命令, chmod +x ./ ...
- C#设计模式--装饰器模式
0.C#设计模式-简单工厂模式 1.C#设计模式--工厂方法模式 2.C#设计模式--抽象工厂模式 3.C#设计模式--单例模式 4.C#设计模式--建造者模式 5.C#设计模式--原型模式 6.C# ...