#深入浅出设计模式

JavaScript设计模式--简单工厂模式

一,介绍工厂模式创建对象(视为工厂里的产品)时无需指定创建对象的具体类。工厂模式定义一个用于创建对象的接口,这个接口由子类决定实例化哪一个类。该模式使一个类的实例化延迟到了子类。而子类可以重写接口方法以便创建的时候指定自己的对象类型。在这里将工厂简单分为三种:(1)简单工厂:通过第三方的类完成松耦合的任务。(2)复杂工...

设计模式——访问者模式

访问者模式是一种行为模式,一般用于封装操作的变化,即对于一组对象(或一个对象)数据结构相对固定,但操作方法上有很多变化,这时候可以使用此设计模式;角色:抽象的访问者角色,定义访问者针对此组对象需要实现的方法约束;    具体访问者角色,实现抽象访问者的约束   抽象被访...
代码星球 代码星球·2020-08-12

设计模式——模板方法模式

模板方法模式:定义完成一件事情的框架,将一些步骤延迟到子类中(实际上是交由子类去做),使得可以不改变算法结构即可重新定义某些步骤;角色:抽象类(一个非抽象方法和若干抽象),具体类(继承于抽象类)优点:使得系统结构组成有层次,有条理;减少代码量,减少不必要的重复代码(抽象类实现的代码不必在每个具体类中实现了)以我司生产环...

设计模式——策略模式

策略模式的重点并不是策略的实现,而是策略的管理的使用!应用场景:当同一种职责,有不同的实现方式的时候可以使用策略管理;角色:1、策略抽象类  2、策略的具体实现   3、策略环境(此类的作用在代码中有详细说明)策略模式是典型的依赖接口编程的实现!策略模式的优点是将算法的...
代码星球 代码星球·2020-08-12

设计模式——状态模式

状态模式(状态对象模式):将状态和行为绑定起来,允许一个对象内部状态改变的时候,改变其行为!本质上是将行为封装在状态中。角色:1、状态行为的抽象2、实际状态对象 3、状态环境(将状态作为成员变量)下面看实际代码:状态行为抽象/**Copyright(c)2017.Xiaomi.Co.LtdAllrightsr...
代码星球 代码星球·2020-08-12

设计模式——观察者模式

观察者模式,用于一对多关系对象之间消息传递。观察者模式的实现需要以下几种角色:1、观察者的抽象角色,一般就是一个接口,里面只有一个update方法,由观察者自己去实现当收到消息后的处理2、观察者角色,实现观察者的抽象3、主题的抽象角色,一般是一个抽象类  用于将观察者聚拢在一个集合里面,并提供观察者的增删方法,同时,提...
代码星球 代码星球·2020-08-12

设计模式——备忘录模式

备忘录模式又称快照模式,是行为模式之一;备忘录模式的应用场景是对某些对象做出了改变之后,又需要恢复到改变之前的状态!常常和命令模式结合使用...备忘录中的三张角色;1、原始角色,需要具有创建备忘录和根据备忘录恢复状态的方法/**Copyright(c)2017.Xiaomi.Co.LtdAllrightsreserve...
代码星球 代码星球·2020-08-12

设计模式——中介者模式

中介者模式一般用于解决多个对象或者多个系统之间相互关联,交互的复杂关系的问题!这种关系一般是网状结构,使用中介者模式,将这种网状结构转换为星型结构,降低各个对象之间的耦合度。网状结构一般会导致系统复杂,可扩展性差,对象可复用程度降低!中介者模式的缺点是中介者类比较复杂,而且一旦出问题可能会影响整个系统!中介者模式的核心...
代码星球 代码星球·2020-08-12

设计模式——命令模式

命令模式:将命令封装成对象(下面示例中的Command对象),实现命令请求和命令执行者的解耦!应用场景:1、出现一组命令的时候。2、需要实现undo操作的时候。3、命令请求与执行可能不是同步的是,需要实现异步处理;4、命令需要事务控制的时候角色:receiver执行命令的具体对象,命令的实际执行者!ICommand命令...
代码星球 代码星球·2020-08-12

设计模式——责任链模式

责任链模式是一种行为模式,由许多可以处理同一件事情的对象,组成一个链状结构,每一个对象记录其下一个对象的引用,用于传递请求;请求在这个链上传递,直到被处理或者是不能处理,返回!tomcat的servlet,Struts的filter都采用了责任链的设计模式。以领导批复员工请假为例:项目经理部门经理boss都可以批准请假...
代码星球 代码星球·2020-08-12

设计模式——门面(外观)模式

一般设计一个复杂的系统的时候,常常将整个系统按照功能划分为几个子系统;这样便于开发,也便于形成比较清晰的架构。但对于使用者来说,如果需要了解各个系统的功能,则不是一件很简单的事情!这时候提供一个了解各个子系统功能的门面角色,用户只需要和门面角色交流即可!例如:电脑开机这件事情,可能需要首先启动CPU,然后启动硬盘,显示...

设计模式——桥接模式

桥接模式属于结构型模式,主要用于某一个类,需要体现两个维度上的特征!例如一碗面条的味道可能需要蔬菜和肉的类型两个维度描述(海带鸡丝面,酸菜牛肉面等),并且每一个维度不能使用基本类型的变量描述,需要使用类描述。桥接模式一般是由接口+抽象类+ 实现类描述的!接口描述一个维度,抽象类描述另一个维度,同时抽象类本身也是一个维度...
代码星球 代码星球·2020-08-12

设计模式——适配器模式

适配器模式一般是在系统改造,更新时,原有的接口与新的接口需求不匹配的情况下,使用适配器模式比较快速的解决此问题。适配器模式的另一个优点是代码的复用,某些场景下,代码基本上可以复用,但需要稍作变动时,可以使用适配器模式来实现代码的复用。一般来说,过多的使用适配器会使得系统比较杂乱,所以如果时间允许,最好是对系统进行重构!...
代码星球 代码星球·2020-08-12

设计模式——原型模式

原型模式的优点:简化对象的创建,使得创建对象就像复制粘贴一样easy。使用原型模式创建对象,一般不会调用类的构造方法,Object的clone方法是一个本地方法,直接操作内存中的二进制流,在复制大对象时,性能差别非常明显。 关于深拷贝与浅拷贝浅拷贝-拷贝的是值类型以及引用类型的地址深拷贝-拷贝的是值类型,对于...
代码星球 代码星球·2020-08-12

设计模式——建造者模式

前面讲述了工厂模式,主要用于创建对象;建造者模式与工厂模式的相同之处在于都属于创建型的设计模式,即都是为解决方便创建对象而产生的设计模式!不同之处在于,工厂模式一般用于创建产品本身较为简单,但是产品种类比较多,产品分类较复杂的场景;建造者模式一般用于创建产品本身比较复杂,但是不同产品的创建都需要遵循一定的流程章法,并且...
代码星球 代码星球·2020-08-12
首页上一页...2021222324...下一页尾页