JavaScript设计模式简单工厂模式WFaceBoss

工厂模式创建对象(视为工厂里的产品)时无需指定创建对象的具体类。

工厂模式定义一个用于创建对象的接口,这个接口由子类决定实例化哪一个类。该模式使一个类的实例化延迟到了子类。而子类可以重写接口方法以便创建的时候指定自己的对象类型。

在这里将工厂简单分为三种:

//基类有共同的提出来functionbasePet(){this.register=function(){document.write("宠物登记...
");}this.eat=function(){document.write("宠物吃饭...
");}}(4)各个实现类---这里是各种动物

functionDog(){Dog.superClass.constructor.call(this);//继承父类//实现接口部分this.run=function(){document.write("小狗跑......
")}this.sing=function(){document.write("小狗唱歌......
")}}functionCat(){Cat.superClass.constructor.call(this);//继承父类//实现接口部分this.run=function(){document.write("小猫跑......
")}this.sing=function(){document.write("小猫唱歌......
")}}functionPig(){Pig.superClass.constructor.call(this);//继承父类//实现接口部分this.run=function(){document.write("小猪跑......
")}this.sing=function(){document.write("小猪唱歌......
")}}functionBird(){Bird.superClass.constructor.call(this);//继承父类//实现接口部分this.run=function(){document.write("小鸟跑......
")}this.sing=function(){document.write("小鸟唱歌......
")}}(5)各个实现类继承基类

//继承extend(Dog,basePet);extend(Cat,basePet);extend(Pig,basePet);extend(Bird,basePet);(6)创建宠物的开始卖宠物

varnewPetShop=newPetShop();varflowerPig=newPetShop.sellPet("pig");flowerPig.run();结果为:

总结一下,上述好像没怎么体现有关工厂之类的,我们应该注意到这么一个问题就是:当需要增加一个新品种宠物时,我们需要修改'宠物店类',耦合度较高。

为了解决这个问题我们使用简单工厂模式来解决。

2,简单工厂模式(针对上述的改进)

(1)接口文件与继承文件的的引入同上面

(2)静态工厂

//使用工厂方式创建宠物对象//静态工厂varfactoryPet={//出售宠物的方法getPet:function(kind){//宠物对象varpet;//宠物种类switch(kind){case'dog':pet=newDog();break;case'cat':pet=newCat();break;case'pig':pet=newPig();break;default:pet=newBird();}//验证接口Interface.ensureImplement(pet,Pet);//判断pet对象是否全部实行接口Pet里面全部的方法returnpet;}}(3)利用工厂创建宠物店对象

varfactoryPetShop=function(){}factoryPetShop.prototype={getPet:function(kind){varpet=factoryPet.getPet(kind);pet.eat();pet.register();returnpet;}}(4)从宠物店购买宠物实现

varnewPetShop=newfactoryPetShop();varflowerCat=newPetShop.getPet("cat");flowerCat.sing();(5)使用简单工厂实现的全部代码(数字标号表示其思考的先后顺序)

所以我们需要根据各个厂家的需求,有不同的工厂,各个卖家可以根据自己需求使用不同的工厂(其实是利用不同子类实现各自合适的工厂),用于满足每个宠物店的不同。

于是我们有了复杂的工厂用来解决该问题。

3,复杂工厂:通过把实例化的任务交给子类来完成的,用以到达松耦合的目的。

此处同样是根据上述进行改进的,还是简单的说明一下实现过程

(1)在html中将接口文件的引进,代码为

/*创建extend函数为了程序中所有的继承操作*///subClass:子类superClass:超类functionextend(subClass,superClass){//1,使子类原型属性等于父类的原型属性//初始化一个中间空对象,目的是为了转换主父关系varF=function(){};F.prototype=superClass.prototype;//2,让子类继承FsubClass.prototype=newF();subClass.prototype.constructor=subClass;//3,为子类增加属性superClass==》原型链的引用subClass.superClass=superClass.prototype;//4,增加一个保险,就算你的原型类是超类(Object)那么也要把你的构造函数级别降下来if(superClass.prototype.constructor==Object.prototype.constructor){superClass.prototype.constructor=superClass;}}(3)分析各个类提出相同的部分作为基类,基类代码如下

//基类分析后有共同的提出来作为基类functionbasePet(){this.register=function(){document.write("宠物登记。。。。
");};this.eat=function(){document.write("宠物吃饭。。。。
");}}(4)各个具体的实现类:继承基类+接口实现

//各个宠物类(实现类)继承基类+接口实现functionDog(){Dog.superClass.constructor.call(this);//继承父类//实现接口this.run=function(){document.write("小狗跑......
")}this.sing=function(){document.write("小狗唱歌......
")}}functionCat(){Cat.superClass.constructor.call(this);//继承父类//实现接口this.run=function(){document.write("小猫跑......
")}this.sing=function(){document.write("小猫唱歌......
")}}functionPig(){Pig.superClass.constructor.call(this);//继承父类//实现接口this.run=function(){document.write("小猪跑......
")}this.sing=function(){document.write("小猪唱歌......
")}}functionBird(){Bird.superClass.constructor.call(this);//继承父类//实现接口this.run=function(){document.write("小鸟跑......
")};this.sing=function(){document.write("小鸟唱歌......
")}}(5)实现类与基类的继承实现,代码如下(调用extend())

extend(Dog,basePet);//动物狗继承基类extend(Cat,basePet);extend(Pig,basePet);extend(Bird,basePet);(6)将商店抽取出来,做成抽象类,代码如下

//把核心商店抽取出来varpetShop=function(){};petShop.prototype={//模拟抽象类需要被子类覆盖getPet:function(kind){varpet=this.getpet(kind);pet.eat();pet.register();returnpet;},getpet:function(model){thrownewError("该类是抽象类,不能实例化")}};(7)利用子类来满足各个商家的不同类型宠物店的实现,代码如下

//利用子类来满足之前的需求(多态)varoneShop=function(){}extend(oneShop,petShop);//继承//覆写方法oneShop.prototype.getpet=function(model){//宠物对象varpet;//宠物种类switch(model){case'dog':pet=newDog();break;default:pet=newBird();}//验证接口Interface.ensureImplement(pet,Pet);//判断pet对象是否全部实行接口Pet里面全部的方法pet.eat();pet.register();returnpet;};同上,这个也是一个不同的子类

twoShop=function(){};extend(twoShop,petShop);//商店的继承//覆写方法twoShop.prototype.getPet=function(model){//宠物对象varpet;//宠物种类switch(kind){case'pig':pet=newPig();break;default:pet=newBird();}//验证接口Interface.ensureImplement(pet,Pet);//判断pet对象是否全部实行接口Pet里面全部的方法pet.eat();pet.register();returnpet;};(8)使用,实质是子类对父类的实例化

这里实现其中一个宠物店,另外一个同理。

//子类对父类的实例化varjim=newoneShop();varpig=jim.getpet("dog");pig.run();pig.sing()(9)上述代码综合在一起为,代码如下

总结一下,在该个模式中主要体现在多态多一点。现在我们将前面的各种综合在一起使用JavaScript的eval()做一个智能化的工厂。

4,通过eval()实现智能化工厂

(1)接口文件和继承文件的引入,如上述的一模一样,这里将不再重复贴代码了,直接开始我们的新东西吧。

(2)接口调用

varPet=newInterface("Pet",["eat","run","sing","register"]);(3)将相同部分提取出来(简单的提取)

//基类分析后有共同的提出来作为基类functionbasePet(){this.register=function(){document.write("宠物登记。。。。
");};this.eat=function(){document.write("宠物吃饭。。。。
");}}(4)各动物类

//实现类继承基类+接口实现functionDog(){Dog.superClass.constructor.call(this);//继承父类//实现接口this.run=function(){document.write("小狗跑......
")}this.sing=function(){document.write("小狗唱歌......
")}}functionCat(){Cat.superClass.constructor.call(this);//继承父类//实现接口this.run=function(){document.write("小猫跑......
")}this.sing=function(){document.write("小猫唱歌......
")}}functionPig(){Pig.superClass.constructor.call(this);//继承父类//实现接口this.run=function(){document.write("小猪跑......
")}this.sing=function(){document.write("小猪唱歌......
")}}functionBird(){Bird.superClass.constructor.call(this);//继承父类//实现接口this.run=function(){document.write("小鸟跑......
")};this.sing=function(){document.write("小鸟唱歌......
")}}(5)实现各动物类继承基类

//继承extend(Dog,basePet);extend(Cat,basePet);extend(Pig,basePet);extend(Bird,basePet);(6)将商店核心抽取出来,做成一个抽象类,代码如下,

varpetShop=function(){};petShop.prototype={//模拟抽象类需要被子类覆盖getPet:function(kind){varpet=this.getpet(kind);pet.eat();pet.register();returnpet;},getpet:function(model){thrownewError("该类是抽象类,不能实例化")}};//这里是做成抽象类其中的getpet方法是通过子类实现的。

(7)做一个智能工厂

//(5)智能工厂只负责生成宠物varPetFactory={sellPet:function(kind){varpet;pet=eval("new"+kind+"()");Interface.ensureImplement(pet,Pet);//判断pet对象是否全部实行接口Pet里面全部的方法returnpet;}}(8)利用子类来满足各个商家的不同类型宠物店的实现,代码如下

其中一个子类

//利用子类来满足各个商家的不同类型宠物店的实现(多态)varoneShop=function(){};extend(oneShop,petShop);//继承//覆写方法oneShop.prototype.getpet=function(model){//宠物对象varpet=null;//宠物种类varpets=["Dog","Cat","Bird"];//商店自己拥有的宠物宠物货架for(vinpets){//循环出索引if(pets[v]==model){//model是我们自己传递过来需要创建的宠物pet=PetFactory.sellPet(model);//验证接口Interface.ensureImplement(pet,Pet);//判断pet对象是否全部实行接口Pet里面全部的方法pet.eat();pet.register();break;}}returnpet;另一个子类

//(商店2)利用子类来满足各个商家的不同类型宠物店的实现(多态)twoShop=function(){};extend(twoShop,petShop);//商店的继承//覆写方法twoShop.prototype.getPet=function(model){//宠物对象varpet=null;//宠物种类varpets=["Pig"];//商店自己拥有的宠物for(vinpets){//循环出索引if(pets[v]==model){pet=PetFactory.sellPet(model);//验证接口Interface.ensureImplement(pet,Pet);//判断pet对象是否全部实行接口Pet里面全部的方法pet.eat();pet.register();break;}}returnpet;};(9)实现开宠物店卖宠物

这里我们来开第二个商店,卖Pig

varshop=newtwoShop();//创建商店varpet=shop.getPet("Pig");//从商店中得到宠物pet.run();//宠物的功能

THE END
1.网友拍下小猫吃饭时的样子,看得出小猫很饿了新闻 体育 汽车 房产 旅游 教育 时尚 科技 财经 娱乐 更多 无障碍 关怀版 登录 视频加载失败,可以 刷新 试试 00:00/00:00 推荐 已经到底了 网友拍下小猫吃饭时的样子,看得出小猫很饿了诸城融媒 发布于:山东省 2024.11.14 11:23 分享到 热门视频 已经到底了 ...https://news.sohu.com/a/826672003_682668
2.独家!5大亮点嘲首次曝光,这座全新潮流商业体预计年底开业玄武花园城两大特色标签是“骑行友好”、“宠物友好”。针对骑行友好主题,项目结合独有的公园商业优势,设置了贯穿A/B/C区和滨河公园骑行道、自行车主题共享空间、自行车停放区等基础设施,并规划了自行车主题业态商业。 在内部空间设计上,玄武花园城将自然生态 、宇宙天文、在地文化融合,打造3大亮点空间:RE-BLOOM 理想...https://m.house365.com/nj/news/030188371.html
3.独居时代,9200万孤独的美食家等待着被取悦其中,RIO旗下品牌3度微醺系列就瞄准“独饮”消费场景,针对都市青年结束忙碌的一天,晚上下班回家之后的独处场景,通过情景化营销培养用户日常化的饮用习惯,将RIO微醺打造为年轻人独处时刻饮酒的第一选择,“陪伴年轻人享受一个人的放松休闲时光”的最佳产品。 https://www.foodtalks.cn/news/39029
4.[生活嘲矢量图]图片免费下载生活嘲矢量图素材千图网为您找到895张生活场景矢量图相关素材,千图网还提供生活场景矢量图图片,生活场景矢量图素材, 生活场景矢量图模板等免费下载服务,千图网是国内专业创意营销服务交易平台,一站式解决企业营销数字化、协同化,实现营销转化效果增长!https://m.58pic.com/tupian/shenghuochangjingshiliangtu.html
1.狗子和主人一起吃饭,两人根本没有距离感,这也太宠狗子了吧!狗子和主人一起吃饭,两人根本没有距离感,这也太宠狗子了吧!欢乐发源地 山东 0 打开网易新闻 体验效果更佳出院后我做了一个决定,儿子儿媳哭了,我却笑了 时光莱啦 907跟贴 打开APP 顶级特工的直觉有多狠,只因女孩说错一句话,就被他直接爆头 花开花影 795跟贴 打开APP 鹅颈藤壶,世界最昂贵的海鲜之一,...https://m.163.com/v/video/VUG3OJ8TK.html
2.它描绘了一幅想象中的嘲,动物围着餐桌一起吃饭.库存例证.插画...插画 关于 它描绘了一幅想象中的场景,动物围着餐桌一起吃饭. 一群不同种类的动物是美丽的景象. 插画 包括有 居住, 里面, 空间 - 326722368https://cn.dreamstime.com/%E5%AE%83%E6%8F%8F%E7%BB%98%E4%BA%86%E4%B8%80%E5%B9%85%E6%83%B3%E8%B1%A1%E4%B8%AD%E7%9A%84%E5%9C%BA%E6%99%AF%EF%BC%8C%E5%8A%A8%E7%89%A9%E5%9B%B4%E7%9D%80%E9%A4%90%E6%A1%8C%E4%B8%80%E8%B5%B7%E5%90%83%E9%A5%AD-%E4%B8%80%E7%BE%A4%E4%B8%8D%E5%90%8C%E7%A7%8D%E7%B1%BB%E7%9A%84%E5%8A%A8%E7%89%A9%E6%98%AF%E7%BE%8E%E4%B8%BD%E7%9A%84%E6%99%AF%E8%B1%A1-image326722368
3.编写程序模拟“主人”喂养“宠物”的嘲,利用多态的思想...提示2: 主人应该有喂养的方法:feed() 宠物应该有吃的方法:eat() 只要主人喂宠物,宠物就吃。 要求:主人类中只提供一个喂养方法feed(),要求达到可以喂养各种类型的宠物。 编写测试程序: 创建主人对象 创建各种宠物对象 调用主人的喂养方法feed(),喂养不同的宠物,观察执行结果。 https://cloud.tencent.com/developer/article/2182538
4.知识点脱水关于死亡,那些令人发笑的问题(猫咪会吃掉我的眼珠...这种现象通常出现在死后几分钟内,但有时也出现在死亡12个小时后。怪声可能移动尸体时,尸体内部的气体会通过气管排出,从而制造出一种诡异的呻吟声;尸体的动静与还未完全死亡的神经系统无关,细菌吞噬内脏产生甲烷和氨构成的气体,导致的屁声。05我们把宠物狗埋在了后院,如果现在把它挖出来,它会是什么样子呢?取决于它...https://book.douban.com/review/15134253/
5.博物馆奇“喵”夜宠物驿站……“它经济”解锁消费新密码观众 许女士:宠物友好的项目很多,但是带它们进博物馆好像还是第一次听说。好多人帮忙一起抢票,才抢到两张携宠的门票。然后给它们准备埃及人的周边头套。 不仅博物馆打破传统,拓展宠物友好空间,一些商圈也开始打造宠物消费场景。日前上海外滩附近,一场以狗狗为主题的公共艺术展在城市公共空间上演。20多只外表可爱的“网...https://news.dayoo.com/china/202409/27/139997_54724530.htm
6.河狸家天鹅到家再融资,复盘11个O2O到家业态赛道的生与死外卖、保洁、装修、搬家、家教等这些是天然需要到家服务的场景,因而属于真实、已经存在的需求。所以,这类 O2O 项目本质上是在做「存量优化」的事情:因为需求总量是固定的,它很难被创造出来,一个没有房子的用户不会因为家装 O2O 项目而增加使用它的机会;但是与其他需求有所不同,外卖(吃饭)是人人都需要的,也是少...https://www.thepaper.cn/newsDetail_forward_9323906
7.深扒40个吃喝嘲,《寄生虫》的细节太强大了再来看看,双方给宠物吃什么: 富人家有三只狗子,吃的是各位铲屎官津津乐道的Natural Balance雪山狗粮,一袋要500块人民币,可能只够这三只吃半个月。日常零食还有各种罐头、日本鱼饼、袋鼠肉干…… 后来,穷人家孩子把袋鼠肉干当零食吃掉了,直到吃完看包装才发现是喂狗的…… ...https://user.guancha.cn/wap/content?id=241461
8.会说话的胡安狗游戏下载会说话的胡安狗v1.6安卓版3、多元化场景:除了宠物主人家中的场景外,游戏还设置了公园、商场等多个场景,让玩家可以亲身感受胡安狗在不同场景下的表现。 会说话的胡安狗游戏亮点 1、完善的PVP系统:可以与其他玩家一对一对战,胜利者可以获得丰厚的奖励。 2、真实的角色扮演:玩家需要扮演狗主人的角色,照顾好自己的宠物,让它健康成长。 3、丰富...https://www.qqtn.com/azgame/838319.html
9.创意婚礼策划方案(汇编15篇)与主持人沟通婚礼形式和内容。确认花轿,服装,婚宴地点,场景装饰等细节。 二、提前二周 通知亲朋好友,并告之婚礼形式。希望他们也能身着中式服装,真正体现民族...一把椅子,上点缀红花。事先新郎要吃饭,桂圆、饺子。新郎出发后,布置新郎的房间,并在门头上挂红绸布(找一朵大红花).门上贴喜子。https://www.yjbys.com/cehuashu/2775093.html
10.今日蚂蚁新村答案蚂蚁新村形堂答案最新在人工智能应用场景中,虚拟数字人是重要的应用方向。人工智能数字人训练师是国家增设的数字新工种,归属于人工智能训练师职业类别。训练师通过不断优化补充模型...宠物烘焙师是专属宠物的营养美食创造者,他们使用新鲜、健康的食材,根据专业的宠物营养学知识,按需定制符合宠物口味的食物,比如宠物蛋糕、宠物零食、宠物下午茶...https://app.ali213.net/gl/713489.html
11.昨天晚上亲戚朋友吃饭聚餐,有一个亲戚带了大家帮昨天晚上亲戚朋友吃饭聚餐,有一个亲戚带了一条宠物狗来吃饭,这条狗舔了桌上的一碗菜,结果全家人都吃了,请问需要去打狂犬疫苗吗https://bbs.guahao.com/question/380613472838221825
12.如何在配音秀应用中制作有趣的宠物视频?1. 捕捉镜头:拍摄宠物的生活点滴,包括它们的日常活动、玩耍、吃饭等场景。确保镜头清晰,并捕捉到宠物的精彩瞬间。 2. 配音录制:根据剧本,为每个镜头录制配音。可以与宠物互动,引导它们做出有趣的动作或说出有趣的话。确保录音质量良好,以便后期制作。 3. 剪辑:将拍摄的视频和录制的配音合并在一起。剪辑时,确保视频...https://sousou.com/bk/32796.html
13.宠物主人应该如何准备自己的宠物进行拍照会在专业的宠物摄影师面前,许多人可能都会感到紧张和不自在。但是,如果你自己也想尝试一下捕捉那些可爱的小生命的瞬间,那么了解一些基本的准备步骤将是非常有帮助的。首先,我们需要明确的是,宠物摄影是一门艺术,它涉及到对动物行为、光线、场景以及后期编辑等多方面的考量。 https://www.gbrczjzrq.cn/xing-ye-ke-pu/412090.html
14.哪些领域私单多?2024八大新消费趋势嘲发布优设网去年,Designest 携手阿里巴巴 ADIC 平台,凭借独有的「生活方式全场景」研究,以及深入的大数据洞察能力,发布了 2023 六大新消费趋势场景预测-「家庭自救站」「枕边疗愈所」「长途智驾游」「融合式国风沉浸馆」「轻烹饪雅致厨房」与「有氧绿色 CBD」。在即将揭晓新一年趋势场景之前,我们不妨先来回顾一下这些一年前的预...https://www.uisdc.com/2024-consumer-trends
15.宠物频道直播,人与宠物的无缝互动新体验教育咨询服务宠物频道直播的内容丰富多样,包括宠物日常生活、养宠知识、宠物技能等,观众可以通过直播观看宠物的吃饭、玩耍、睡觉等日常生活场景,了解养宠的各种知识,还可以观看宠物表演各种技能。 2、互动性强 宠物频道直播的互动性很强,观众可以通过弹幕、评论等方式与主播互动,提问、分享养宠经验,观众还可以参与直播互动活动,如投...http://www.jsbsym.cn/post/235.html