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

JS设想形式进修_基本篇

一、写在前面设想形式的定义:在面向对象软件设想过程当中针对特定题目的简约而文雅的处置惩罚方案固然我们能够用一个浅显的说法:设想形式是处置惩罚某个特定场景下对某种题目的处置惩罚方案。

一、写在前面

设想形式的定义:在面向对象软件设想过程当中针对特定题目的简约而文雅的处置惩罚方案

固然我们能够用一个浅显的说法:设想形式是处置惩罚某个特定场景下对某种题目的处置惩罚方案。因而,当我们碰到适宜的场景时,我们能够会条件反射一样自然而然想到相符这类场景的设想形式。

比方,当体系中某个接口的构造已没法满足我们如今的营业需求,但又不能修正这个接口,由于能够原本的体系许多功用都依靠于这个接口,修正接口会牵扯到太多文件。因而应对这类场景,我们能够很快地想到能够用适配器形式来处置惩罚这个题目。

以上参考自网易考拉前端团队-Javascript设想形式

二、设想准绳

设想哲学原则:

  1. 小等于美
  2. 让每一个顺序只做好一件事
  3. 疾速竖立原型
  4. 舍弃高效率而取可移植性
  5. 采纳纯文原本存储数据
  6. 充分利用软件的杠杆效应(可复用)
  7. 运用shell脚原本进步杠杆效应和可移植性
  8. 防止强制性的用户界面
  9. 每一个顺序都称为过滤器

小原则:

  1. 许可用户定制环境
  2. 只管使操纵体系内核小而轻量化
  3. 运用小写字母且简写 list = ls
  4. 沉默是金
  5. 各部份之和大于团体
  6. 追求90%的处置惩罚方案

三、SOLID设想准绳

  • S 单一职责准绳 single

    • 一个顺序只做好一件事变
    • 假如功用庞杂就拆脱离,每一个部份坚持自力
  • O 开放关闭准绳 open

    • 对扩大开放,对修正关闭
    • 增添需求时,扩大新需求,而非修正已有代码
    • 这是软件设想的终极目标
  • L 李氏置换准绳

    • 子类能掩盖父类
    • 父类能涌现的处所子类就可以涌现
    • JS运用较少
  • I 接口自力准绳

    • 坚持接口自力,防止涌现“胖接口”
    • JS中没有接口(ts)
  • D 依靠致使准绳

    • 面向接口编程,依靠于笼统而不依靠于详细
    • 运用方只体贴接口而不体贴详细类的完成
    • JS运用较少

四、23种设想形式

  • 建立型设想形式
    是一类处置惩罚对象建立的设想形式,经由过程某种体式格局掌握对象的建立来防止基础对象建立时能够致使设想上的题目或增添设想上的庞杂度。工场形式、单例形式
  • 构造型设想形式
    关注于怎样将类或对象组合成更大、更庞杂的构造,以简化设想。适配器形式、装潢器形式、代办形式、表面形式
  • 行动型设想形式
    用于差别对象之间职责分别或许算法笼统,行动型设想形式不单单议触及类和对象,还触及类或对象之间的交换形式并加以完成。观察者形式、迭代器形式、状况形式

五、UML类图

UML(Unified Modeling Language)是一种一致建模言语,为面向对象开辟体系的产物举行申明、可视化、和编制文档的一种规范言语。

5.1 类图的示意

类图分三层,第一层显现类的称号,假如是笼统类,则就用斜体显现。第二层是类的特征,一般就是字段和属性。第三层是类的操纵,一般是要领或行动。前面的标记,+ 示意public,- 示意private,# 示意protected(js中为严厉辨别,ts中有)

《JS设想形式进修_基本篇》

那末怎样依据类图写出响应的代码构造呢?以下:

《JS设想形式进修_基本篇》

注:默许不增加属性或要领范例,即为 public,因而 public 可省略

5.2 类关联示意

  • 泛化关联【继续】
    空心箭头示意,是一种继续关联。比方:自行车是车
  • 聚合关联
    空心菱形箭头示意,是团体与部份的关联,与组合关联差别,团体和部份不是强依靠的。比方,部门撤销了,职员不会消逝,他们依旧存在
  • 组合关联
    实心菱形箭头示意,是团体与部份的关联,但部份不能脱离团体而零丁存在。如公司和部门是团体和部份的关联,没有公司就不存在部门
  • 关联关联【援用】
    实线(可带单/双箭头)示意,是一种具有的关联,它使一个类晓得另一个类的属性和要领

    《JS设想形式进修_基本篇》

除了上述类关联外,另有完成关联,依靠关联等示意法,可参考下面博文:
看懂UML类图和时序图
UML 种种图总结英华

六、真题

1 依据下面的信息画UML类图

  • 打车时,能够打快车或许专车。任何车都有车牌号和称号
  • 差别车打车价钱差别,快车1元/千米,专车2元/千米
  • 路程最先时显现车辆信息
  • 路程完毕时显现打车金额

2 依据下面的信息画UML类图

  • 某泊车场,分三层,每层100车位
  • 每一个车位都能监控到车辆的驶入和脱离
  • 车辆驶入前,显现每层空余车位数目
  • 车辆驶入时,摄像头可辨认车牌号和时候
  • 车辆出来时,出口显现器显现车牌号和泊车时候

《JS设想形式进修_基本篇》

剖析:

  • 车是一个大类,快车和专车继续自车
  • 路程是一个零丁的类,衔接用车和最先完毕两个行动

《JS设想形式进修_基本篇》

剖析:

  • 关联1:车位构成层,层构成车库。组合关联
  • 关联2:摄像机和显现屏是车库的部份,且能零丁存在。聚合关联
  • 车停入车位时,须要鉴别该车位状况(是不是为空车位)
  • 车库须要纪录车驶入驶出的状况和纪录车位数,须要经由过程层猎取

推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
author-avatar
手机用户2502937541
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有