热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

02工厂,创建者

工厂模式简单工厂模式创建同一类的对象;varPopFatoryfunction(name){switch(name){case'alert':r

工厂模式

简单工厂模式

  • 创建同一类的对象;
var PopFatory = function (name) {
switch(name) {
case 'alert':
return new LoginAlert();
case 'confirm':
return new LoginConfirm();
case 'prompt':
return new LonginPrompt();
}
}
  • 通过一个对象来代替
function createPop(type, text) {
var o = {
content: 'text',
show = function() {}
}
switch(type) {
case 'alert':
....
case 'confirm':
....
case 'prompr':
...
}
return o;
}

工厂方法模式

  • 创建多类;
  • 将实际创建对象工作推迟到子类当中;
var Factory = function (type, content) {
var self = this instanceof Factory
? this : Object.create(Factory.prototype);
....
return self[type](cntent);
}
//在原型中创建所有基类
Factory.prototype = {
...
}

抽象工厂模式

  • 创建的不是对象实例,而是一个类簇;
  • 汽车模型例子:
var VehicleFactory = function (subType, superType) {
if(typeof VehicleFactory[superType] === 'function') {
function F(){};
F.prototype = new VehicleFactory[superType]();
superType.cOnstructor= subType;
subType.prototype = new F();
} else {
throw Error('为创建该抽象类')
}
}

VehicleFactory.Car = function () {
this.type = 'car';
}
VehicleFactory.Car.prototype = {
getPrice: function () {
return new Error('抽象方法不能使用');
},
getSpeed: function () {
return new Error('抽象方法不能使用');
}
}

//对抽象类的继承实现
var BMW = function (price, speed) {
this.price = price;
this.speed = speed;
}
VehicleFactory(BMW, 'Car');
BMW.prototype.getPrice = function () {
return this.price;
}
BMW.prototype.getSpeed = function () {
return this.speed;
}

创建者模式

  • 将一个复杂对象的构建层和表示层分离;
  • 工厂模式不关心过程而关心最后的产出,建造者模式更关注创建的细节;

招聘模版例子

var Human = function (params) {
this.skill = params && params.skill || '保密';
this.hobby = params && params.hobby || '保密';
}
Human.prototype = {
getSkill: function() {...},
getHobby: function() {...}
}

var Named = function (name) {
var index;
this.wholeName = name;
if((index = name.indexOf(' ')) > -1) {
this.FirstName = name.slice(0, index);
this.secOndName= name.slice(index + 1);
}
}

var Work = function (work) {
switch(work) {
case 'code':
this.work = '工程师';
this.workDescript = '...';
break;
...
default:
this.work = work;
this.workDescript = 'None';
}
}
Work.prototype = {
changeWork: function () {...},
changeDescript: function () {...}
}

var Person = function (name, work) {
var _person = new Human();
_person.name = new Named(name);
_person.work = new Work(work);
return _person;
}

原型模式

  • 用原型实例指向创建对象的类,新对象共享原型属性、方法;

图片轮播例子

//轮播基类
var LoopImages = function (imgArr, container) {
this.imagesArray = imgArr;
this.cOntainer= container;
}
LoopImages.prototype = {
createImage: function () {
console.log('create Img');
},
changeImg: function () {
console.log('change Img');
}
}
//上下滑动切换
var SlideLoopImg = function (imgArr, container) {
LoopImages.call(this, imgArr, container);
}

SlideLoopImg.prototype = new LoopImages();
//重写切换方法
SlideLoopImg.prototype.changeImg = function () {
console.log('slide change Img');
}

var FadeLoopImg = function (imgArr, container, arrow) {
LoopImages.call(this, imgArr, container);
this.arrow = arrow;
}
FadeLoopImg.prototype = new LoopImages();
FadeLoopImg.prototype.changeImg = function () {
console.log('fade change Img');
}

模版对象克隆

function prorotypeExtend() {
var args = arguments, len = args.length,
F = function () {}, i = 0, temp;
for(; i temp = args[i];
for(var j in temp) {
F.prototype[j] = temp[j];
}
}
return new F();
}

外观模式

  • 为一组负责的子系统接口提供一个更高级的统一接口;

推荐阅读
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
author-avatar
訫鈊衅
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有