浅谈JavaScript设计模式.

news/2024/7/19 14:05:47 标签: js, JavaScript, 设计模式

什么是设计模式

百度百科:
设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。
使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。

设计模式的种类

设计模式分为三种类型,共23种,本文总结平时相对来说用的比较多的几种设计模式
创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式)、访问者模式。

工厂模式

Factory Method(工厂模式):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method使一个类的实例化延迟到其子类,最终返回一个对象。

function work(name, sex) {
        //函数里面封装对象  返回对象
        var obj = new Object();
        //设置相关属性
        obj.name = name;
        obj.sex = sex;
        obj.sleep = function () {
            return "正在吃饭!";
        }
        return obj;
    }
    var object = work("张三", "男");
    console.log(typeof object);
   

构造函数模式

构造函数用于创建特定类型的对象——不仅声明了使用过的对象,构造函数还可以接受参数以便第一次创建对象的时候设置对象的成员值。你可以自定义自己的构造函数,然后在里面声明自定义类型对象的属性或方法。

在JS中,构造函数通常是认为用来实现实例的,JavaScript没有类的概念,但是有特殊的构造函数。通过new关键字来调用自定义的构造函数,在构造函数内部,this关键字引用的是新创建的对象。

function bullet() {
        this.width = 20;
        this.height = 15;
        this.speed = 10;
        this.g = 9.8;
        this.flymove = function () {
        }
    }
    var b = new bullet();
    console.log(b);

原型模式

用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。
原型链模式开发会导致不同的对象之间数据共享!!

function person() {

    }
    person.prototype.sleep = function () {
        return "睡觉";
    }
    person.prototype.name = "张三";
    var p = new person();
    console.log(p);
    var p1 = new person();
    console.log(p1);

单例模式

单例模式定义了一个对象的创建过程,此对象只有一个单独的实例,并提供一个访问它的全局访问点。也可以说单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象。

var obj = (function () {
        var newobj;
        function getobj() {
            //实例化对象  返回对象
            if (newobj == undefined) {
                newobj = new factory();
            }
            return newobj;
        }
        //创建对象的实例
        function factory() {
            //对象的封装
            this.name = "";
            this.sex = "";
            this.sleep = function () {
            }
        }

        return {
            getObj: getobj
        }
    })();
    console.log(obj.getObj());

组合模式(构造模式 + 原型链模式)

 function f1() {
        this.name = "小明"
    }
    f1.prototype.sleep = function () {
        return "睡觉"
    }
    var f = new f1();
    console.log(f);

http://www.niftyadmin.cn/n/1472913.html

相关文章

win10可用空间新建卷提示磁盘上没有足够的空间完成此操作如何解决

解决方式: 1.Windows键R,打开运行对话框,键入:diskpart 进入duWindows 自带的磁盘管理程序进入DOS窗口:DISKPART> 2.键入: list disk 选择查看该电脑下已连接的硬盘,dao会显示如下&#x…

hdu - 4974 - A simple water problem(贪心 + 反证)

题意&#xff1a;N个队(N < 100000)&#xff0c;每一个队有个总分ai(ai < 1000000)&#xff0c;每场比赛比赛两方最多各可获得1分&#xff0c;问最少经过了多少场比赛。题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid4974 ——>>我们应该尽量使每…

torch中nn.ReLU和F.ReLU的不同

可以看下面的代码 其实TestNet_1和TestNet_2执行的结果是一样的&#xff0c;但是明显 Relu的位置是不一样的&#xff0c;一个是nn库内的&#xff0c;一个是nn.functional内的 import torch.nn as nn import torch.nn.functional as F import torch.nn as nnclass TestNet_1(n…

MfcStrFile

/* ******* MfcStrFile.h ********** ********* 字符串、文件、目录操作函数声明 ********** *//* author: autumoon */#pragma once#ifdef _X86_ #pragma comment(linker,"/manifestdependency:\"typewin32 nameMicrosoft.Windows.Common-Controls version6.0.0.0 p…

【Centos7】GCC版本编译升级

之前讲过一次关于Centos7的GCC版本的升级&#xff0c;这里&#xff0c;主要使用源码对GCC进行升级&#xff0c;即在安装完成后不用再切换GCC环境。 1 切换到root属性 su [rootlocalhost ~]# yum -y install wget 2 下载GCC源码 以下命令会放在 usr/local/ 下面 [rootlocal…

redis 的 RDB 和 AOF 持久化的区别

Redis 持久化: 提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF. RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照&#xff08;point-in-time snapshot&#xff09;。 AOF 持久化记录服务器执行的所有写操作命令&#xff0c;并在服务器启动时&#xff0c;通过重…

Centos7安装百度云盘

本文介绍如何在Centos7中安装百度云盘&#xff0c;主要是想通过它下载一些大的数据集。 客户端下载链接进入 选择Linux版本中的rpm进行下载。 这里需要注意&#xff1a;百度云盘编译环境需要是 GCC 4.9 以上&#xff0c;而系统默认是4.8.5 所以需要对GCC进行升级&#xff0c;…

目标检测中Anchor如何映射到原图

Anchor在目标检测中是比较常见的&#xff0c;引入Anchor主要是为了让检测更精准&#xff0c;当然现在有很多Anchor Free的方法也达到了较好的结果&#xff0c;但是最近项目中用的是基于Anchor的方法&#xff0c;但是置于Anchor怎么映射到原图其实网上很多内容比较混乱&#xff…