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

JS设想形式八(制作者形式)

制作者形式将一个庞杂的构建与其示意相星散,使得一样的构建历程能够建立差别的示意。重要处理在软件体系中,有时候面临着”一个庞杂对象”的建立事情,因为需求的变化,这个庞杂对象的某些部份
制作者形式

将一个庞杂的构建与其示意相星散,使得一样的构建历程能够建立差别的示意。重要处理在软件体系中,有时候面临着”一个庞杂对象”的建立事情,因为需求的变化,这个庞杂对象的某些部份常常面临着猛烈的变化,一些基础部件不会变。所以须要将变与稳定星散。与笼统工场的区分:在制作者形式里,有个指点者(Director),由指点者来治理制作者,用户是与指点者联络的,指点者联络制作者末了获得产物。即制作者形式能够强迫执行一种分步骤举行的制作历程。

制作者形式四要素

1.产物类Product:平常是一个较为庞杂的对象,也就是说建立对象的历程比较庞杂,平常会有比较多的代码量。
2.笼统制作者类Builder: 将制作的详细历程交与它的子类来完成,如许更轻易扩大。
3.制作者类ConcreteBuilder: 组建产物;返回组建好的产物。
4.指点类Director: 担任挪用恰当的制作者来组建产物,指点类平常不与产物类发作依靠关联,与指点类直接交互的是制作者类

制作者形式长处

1.制作者形式的封装性很好。运用制作者形式能够有用的封装变化,在运用制作者形式的场景中,平常产物类和制作者类是比较稳定的,因而,将重要的营业逻辑封装在指点者类中对整体而言能够获得比较好的稳定性。
2.制作者形式很轻易举行扩大。如果有新的需求,经由过程完成一个新的制作者类就能够完成。

举例

好像很笼统。举个例子:前面你建立了一个临盆保时捷的工场,临盆一台保时捷911须要的重要部件都一样(引擎,轮子,方向盘…)和流程是稳定的,变的是引擎,轮子,控制体系等等部件详细完成,这些部件的临盆交由详细的builder去临盆。

代码

//制作者形式
var DP = require("./DesignPattern.js");
function Car() {
var _frame, _engine, _wheel;
this.setFrame = function (val) {
_frame = val;
};
this.setEngine = function (val) {
_engine = val;
};
this.setWheel = function (val) {
_wheel = val;
};
this.getFrame = function () {
return _frame
};
this.getEngine = function () {
return _engine
};
this.getWheel = function () {
return _wheel
};
this.check = function () {
console.log(_frame + '搜检终了');
console.log(_engine + '搜检终了');
console.log(_wheel + '搜检终了');
};
}
//笼统临盆者
function Builder() {
DP.Interface(this, ['buildFrame', 'buildEngine', 'buildWheel', 'buildCar'])
}
//指点者,产物临盆流程范例
function Director(Builder) {
//传入详细制作者
var _builder = Builder;
this.build = function () {
_builder.buildFrame();
_builder.buildEngine();
_builder.buildWheel();
return _builder.buildCar();
};
}
function Builder911() {
this.__proto__ = new Builder();
var _car = new Car();
this.buildFrame = function () {
console.log('制作911骨架');
_car.setFrame('911骨架');
};
this.buildEngine = function () {
console.log('制作911引擎');
_car.setEngine('911引擎');
};
this.buildWheel = function () {
console.log('制作911轮子');
_car.setWheel('911轮子');
};
this.buildCar = function () {
console.log('911汽车各部组装终了');
return _car;
};
}
function BuilderCayma() {
this.__proto__ = new Builder();
var _car = new Car();
this.buildFrame = function () {
console.log('制作Cayma骨架');
_car.setFrame('Cayma骨架');
};
this.buildEngine = function () {
console.log('制作Cayma引擎');
_car.setEngine('Cayma引擎');
};
this.buildWheel = function () {
console.log('制作Cayma轮子');
_car.setWheel('Cayma轮子');
};
this.buildCar = function () {
console.log('Cayma汽车各部组装终了');
return _car;
};
}
var builder911 = new Builder911();
var director911 = new Director(builder911);
var car911 = director911.build();
car911.check();
var builderCayma = new BuilderCayma();
var directorCayma = new Director(builderCayma);
var Cayma = directorCayma.build();
Cayma.check();

实用场景

须要天生的对象具有庞杂的内部结构;须要天生的对象内部属性自身相互依靠。


推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文总结了Java中日期格式化的常用方法,并给出了示例代码。通过使用SimpleDateFormat类和jstl fmt标签库,可以实现日期的格式化和显示。在页面中添加相应的标签库引用后,可以使用不同的日期格式化样式来显示当前年份和月份。该文提供了详细的代码示例和说明。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
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社区 版权所有