首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

聊一聊前端常用的设计模式

目的:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。优化 if-else 分支。 应用场景:一个系统有许多许多类,而区分它们的只是他们直接的行为。...,不需要知道集合对象的底层表示。...被观察对象(subject)维护一组观察者(observer),当被观察对象状态改变时,通过调用观察者的某个方法将这些变化通知到观察者。...对象,使其取消订阅自己 fire(): 触发事件,通知到所有观察者 目的:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作 应用场景:当两个模块直接沟通会增加它们的耦合性时...// 聊天室成员类 class Member { constructor(name) { this.name = name this.chatroom = null } //

19110

Java基础

多态程序绑定 定义:绑定指的是一个方法的调用与方法所在的类或对象(方法主体)关联起来。...对java来说,绑定分为静态绑定和动态绑定 静态绑定(前期绑定):在程序执行前方法已经被绑定,此时由编译器或其它连接程序实现。在编译阶段,绑定的是类信息,即为定义的类的类型。...Java 8系列之Stream Stream 是用函数式编程方式在集合类上进行复杂操作的工具,其集成了Java 8中的众多新特性之一的聚合操作,开发者可以更容易地使用Lambda表达式,并且更方便地实现对集合的查找...静态内部类的非静态成员可访问外部类的静态变量,而不可访问外部类的非静态变量。 匿名内部类: 没有类名,没有class关键字也没有extends和implements等关键字修饰。...行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。 36.

1.3K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    漫谈 C++ 的各种检查

    1.2 可拷贝性检查 C++ 语言本身有很多编译时检查(例如 类的成员访问控制 (member access control)、const 关键字 在编译成汇编语言后,不能反编译还原),但 C++ 对象默认是可拷贝的...扩展了base::IsWeakReceiver检查,判断弱引用的上下文是否有效;并通过静态断言检查传入参数,强制要求使用者遵循 弱引用检查的规范: base::Bind 不允许直接将 `this` 指针 绑定到...类的成员函数 上,因为 this 裸指针可能失效 变成野指针 base::Bind 不允许绑定 lambda 表达式,因为 base::Bind 无法检查 lambda 表达式捕获的 弱引用 的 有效性...base::Bind 只允许将 base::WeakPtr 指针绑定到 没有返回值的(返回 void)类的成员函数 上,因为 当弱引用失效时不调用回调,也没有返回值 base::Callback区分回调只能执行一次还是可以多次...析构时,将迭代器 标记为无效(自动停止迭代),并 移除、销毁 线程安全问题 问题:由于 base::ObserverList 不是线程安全的,在通知迭代时,需要保证其他操作在 同一线程/序列 解决:被观察者成员

    2.5K20

    柴毛毛大话设计模式——开发常用的设计模式梳理

    类型的属性,Car和House的实例是以参量的方式传入到buy()方法中。...例如,汽车类与引擎类、轮胎类,以及其它的零件类之间的关系便整体和个体的关系。 与关联关系一样,聚合关系也是通过成员变量实现的。...可方便地创建具有不同策略的对象 如果我们需要根据不同的策略创建多种类A的对象,那么使用策略模式就能很容易地实现这一点。 比如,我们要创建三个A类的对象,a、b、c。...当调用者需要广播最新数据时,只需调用 被观察者 的notidyObservers()函数,该函数会遍历List集合,并依次调用每个Observer的update函数,从而完成数据的发送,并触发每个Observer...这样,当判断逻辑发生变化的时候,只需要新增状态类,并通过修改XML的方式将新的状态类插入到判断逻辑中。从而满足了开放封闭原则。 ---- 代理模式 代理模式 ?

    1.3K70

    从字节码深刻理解内部类

    嵌套类有四种: 静态成员类 非静态成员类 匿名类 局部类 除了第一种之外,其他三种都被称为内部类。 匿名类的缺陷 除了在他们声明的时候之外,是无法将他们实例化的。...不能执行 instanceof 测试,或者做任何需要命名类的其他事情。 无法实现多个接口,或者扩展一个类。 匿名类的客户端除了从它的超类型中继承得到之外,无法调用任何成员。...静态工厂的内部 静态内部类 在类中再定义类,并且这个类用 static 修饰 使用静态内部类实现的单例 public class Singleton { private static class...例如,Map 接口的实现往往使用非静态内部类来实现它们的集合视图。Set 和 List 这种集合接口的实现往往也使用非静态内部类来实现他们的迭代器。...非静态内部类、匿名内部类引起的内存泄漏 非静态内部类、匿名内部类创建对象后内部会持有外部类对象的引用,因此外部类对象的生命周期就和它们绑定在了一起。

    92220

    java综合面试练习题

    一个类只能有一个父类 一个父类可以被任意数量的子类继承 并不能直接获取,如果父类的一些成员被private修饰,那么子类是无法访问的 默认default权限修饰的情况,子类必须和父类同一包下才可访问 如果要异包访问...,父类的成员必须声明protected 3....,分别表示什么意思 可修饰 类、方法、属性、局部变量 - 修饰局部变量表示,这个变量有且只能有唯一的一次赋值 - 修饰属性,同局部一样,但是可以使用显示声明、构造器注入、代码块注入 - 修饰方法, 表示此方法不能被重写...使用keySet()方法:获取key的Set集合 获取值 get( Object key):根据键获取值 entrySet();获取entry的Set集合,而entry是键值对的封装 24.你所知道的集合类都有哪些...Map集合类用于存储元素对(称作"键"和"值"),其中每个键映射到一个值。

    58150

    一天一个设计模式:单例模式

    双检锁的关键是,使用volatile,它在此处的作用是,该变量将不会被某一个线程缓存,而是在共享内存中,被所有进行读写的内存共享到,从而保证多个线程能够正确处理该变量。...类级内部类是外部类的static部分,它的对象与外部类对象间并没有依赖关系,因此可以直接创建。而对象级内部类的实例,是绑定在外部对象的实例中的。   ...类级内部类中,可以定义静态方法,在静态方法中只能够引用外部类中的静态成员或者成员变量。   类级内部类相当于外部类的成员,只有在第一次被使用的时候才会加载。...public class Singleton { private Singleton(){} /** * 类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例...* 没有绑定关系,而且只有被调用到时才会装载,从而实现了延迟加载。

    36710

    万字长文 JVM调优之垃圾回收机制深度剖析:大对象定位与问题解决的终极秘籍

    结合代码分析根据分析结果,定位到代码中创建大对象的位置。检查是否有不必要的大对象创建,或者大对象的生命周期是否过长。例如,检查是否有大量未使用的大型数组、集合等对象。...十七、内存泄漏的常见原因(一)静态集合类静态集合类(如List、Set、Map等)的生命周期与类的生命周期相同。如果静态集合类中添加了大量对象,这些对象会一直被集合引用,无法被垃圾回收,导致内存泄漏。...可以考虑将静态集合类改为非静态变量,或者在不需要时清空集合。...java复制// 使用FindBugs或PMD检查代码二十一、静态集合类的正确使用(一)避免静态集合类引用大量对象静态集合类的生命周期与类的生命周期相同,如果静态集合类中添加了大量对象,这些对象会一直被集合引用...静态集合类在并发环境下的注意事项避免静态集合类引用大量对象:静态集合类的生命周期与类的生命周期相同,如果静态集合类中添加了大量对象,这些对象会一直被集合引用,无法被垃圾回收,导致内存泄漏。

    11610

    JAVA中的23种设计模式(GOF)

    抽象工厂模式 优点: 具体产品在应用层的代码隔离,无需关心创建的细节 将一个系列的产品统一到一起创建 缺点: 规定了所有可能被创建的产品集合,产品簇中扩展新的产品困难; 增加了系统的抽象性和理解难度 抽象产品族各接口...网站抽象类 public abstract class WebSite { public abstract void use(User user); } 具体实现类(可共享的内部状态) public...在聚合类中,我们把迭代器分开,就是要把管理对象集合和遍历对象集 合的责任分开,这样-来集合改变的话,只影响到聚合对象。而如果遍历方式改变 的话,只影响到了迭代器。...优点: 观察者模式设计后,会以集合的方式来管理用户(Observer),包括注册,移除和通知。...Observer类:观察者一般是一个接口,每一个实现该接口的实现类都是具体观察者。

    93851

    java面试题汇总-基础篇

    3.接口的子类是实现接口,关键字是implements,抽象类的子类是继承,关键字是extends。 4.接口不能定义成员变量,只能定义常量。抽象类可以定义成员变量。...①修饰成员变量,用static修饰的成员变量就成为静态变量,静态变量只会存在一份,在类被加载时会初始化,且只会加载一次,通过类名访问。...但是还是要明确到类,然后才能调用类中的静态成员。...LinkedList在查询时,需要从前到后依次遍历,所以查询效率不高,但是在增删时只需要更改节点的引用,开销较少,所以增删效率较高。 List集合排序的方式有哪些?...synchronized的锁可重入、不可中断、非公平。而Lock锁可重入、可判断、可公平(两者皆可)。 有哪些常用的线程安全的集合?

    80610

    设计模式

    Singleton类被装载时,不会立即实例化,当首次调用getInstance方法时,会装载SingletonInsatnce类,* 从而完成Singleton类的实例化* - 类的静态属性只会在第一次加载类的时候初始化...实现方式/*** 浅拷贝(使用clone()方法实现)* a)成员变量为基本数据类型时,会直接进行值传递(即将成员变量的值复制一份给新对象);* b)成员变量为引用数据类型时,只进行引用传递(即将成员变量的引用复制一份给新对象...通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任。4、增加新的请求处理类很方便。缺点: 1、不能保证请求一定被接收。...,通过attach和detach方法维护一个观察者的集合,当自己维护的状态(state)改变时通知(notify)所有观察者;3、抽象观察者(Observer):定义更新自己的方法;4、具体观察者(ConcreteObserver...System.out.println("===CTO查看报表==="); report.showReport(new CTO()); }特点1、访问者模式把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化

    37220

    .NET Core采用的全新配置系统: “Options模式”下的配置是如何绑定为Options对象

    目录 一、配置绑定 二、扩展方法AddOptions 三、扩展方法Configure 四、Options对象的创建 一、配置绑定 对于一个Options对象来说,如果我们将其数据成员(这里主要指属性成员...如果Options类型的数据成员定义与配置树结构具有匹配的结构,那么将后者绑定为一个对应类型的Options对象是一件很容易的事情,对于这种将一个Configuration对象绑定为对应Options对象的行为简称为...在调用这个放过的时候,我们会创建一个空的Options对象并将其作为参数,该方法会将Configuration承载的配置数据绑定到Options对象上。...,也可以是一个自定义数据类型,还可以是一个数组、集合或者字典类型。...上,采用的生命周期模式为Singleton。

    705100

    Java设计模式 笔记

    类图不显示暂时性的信息。类图是面向对象建模的主要组成部分。 类图的作用 在软件工程中,类图是一种静态的结构图,描述了系统的类的集合,类的属性和类之间的关系,简化了人们对系统的理解。...聚合对象也是通过成员对象来实现的,其中成员对象是整体对象的一部分,但是成员对象可以脱离整体而独立存在,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享,所以聚合关系也常称为共享关系...结构 抽象主题(Subject):抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数量的观察者,抽象主题提供一个接口,可以增加和删除观察者对象 具体主题(ConcreteSubject...Observable类 Observable类 是抽象目标类(被观察者),它有一个 Vector 集合成员变量,用于保存所有要通知的观察者对象 void addObserver(Observer o)...用于将新的观察者对象添加到集合中 void notifyObservers(Object arg) 调用集合中的所有观察者对象的 update 方法,通知它们刷新数据 void setChange()

    80010

    技能篇:实际开发常用设计模式

    ; //增强的功能 } } 代理模式 代理类是客户类和委托类的中介,可以通过给代理类增加额外的功能来扩展委托类的功能,这样只需要修改代理类而不需要再修改委托类,符合代码设计的开闭原则 和装饰器模式的区别...使得类与类之间的关系解耦。...void stepTwo(String data) { System.out.println("hi: "+data); } } 迭代子模式 循环处理多个相同对象,用来遍历集合或者数组...很多时候我们是需要记录当前的状态,这样做的目的就是为了允许用户取消不确定或者错误的操作,恢复到原先的状态 缺点:消耗资源。...如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存 @Data public class Memento { private String state; public

    59220

    JavaScript设计模式之单例模式

    这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。...= false; 上面示例的单例对象可以被修改,你可以随意添加属性和方法到对象中,又或者用delete运算符删除现有的成员。...javascript不是一门传统的语言,所以不必一定要按传统的定义来限定它,我们将单例模式的定义更广义化:单例类是一组相关的属性和方法的集合,如果它能被实例化,那么它只能被实例化一次。...拥有私有成员的单例类: 现在一个对象字面量就是javascript中最简单的单例类,那怎么实现单例类的私有成员呢?私有成员是对象内部独有的、其他对象无法访问的成员。...(); //singleton 上面的单例类实现的name成员的私有化。

    42030
    领券