草庐IT

【策略设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

简介策略模式(StrategyPattern)属于行为型设计模式。将每一个算法封装到具有共同接口的独立类中,根据需要来绑定策略,使得具体实现和策略解耦。当你想使用对象中各种不同的算法变体,使用if...else所带来的复杂和难以维护,可使用策略模式。或者当有许多相同类,它们仅在执行某些行为时略有不同,可使用策略模式。作用策略算法可以自由切换,保持策略与执行类的松耦合。避免使用多重条件判断,不同环境角色可以组装多个策略。扩展性良好,可以随时增删策略行为。体现了多用组合,少用继承。实现步骤建立一个策略接口。新建多个策略行为类,实现该策略接口。建立一个抽象环境角色类,并将策略接口组合进来。是否需要抽

【单例设计模式原理详解】Java/JS/Go/Python/TS不同语言实现

简介单例模式(SingletonPattern)属于创建型设计模式,这种模式只创建一个单一的类,保证一个类只有一个实例,并提供一个访问该实例的全局节点。当您想控制实例数目,节省系统资源,并不想混用的时候,可以使用单例模式。单例有很多种实现方式,主要分为懒汉和饿汉模式,同时要通过加锁来避免线程安全。不同语言的单例实现略有差异,可以通过查看不同版本的源码来深入理解其中的差异。作用避免全局使用的类频繁地创建与销毁。保证一个类仅有一个实例,并提供一个访问它的全局访问点。实现步骤创建单例类,注意线程安全返回全局唯一实例UML Java代码单例实现,不同语言有很大不同,跟语言特性有关。请查看其他源码进行比

【代理设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

简介代理模式(ProxyPattern)是一种结构型设计模式,用一个类来代理另一个类或几个类的功能。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。延迟初始化(虚拟代理)。如果你有一个偶尔使用的重量级服务对象,一直保持该对象运行会消耗系统资源时,可使用代理模式。访问控制(保护代理)。如果你只希望特定客户端使用服务对象,这里的对象可以是操作系统中非常重要的部分,而客户端则是各种已启动的程序(包括恶意程序),此时可使用代理模式。作用为其他对象提供一种代理访问的方式。避免直接访问可能带来的问题,通过接口和代理来实现高扩展。实现步骤定义一个基础接口,约定一些方法。建立原始类,实现接口

【外观设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

【外观设计模式详解】C/Java/JS/Go/Python/TS不同语言实现简介外观模式(FacadePattern),也叫门面模式,是一种结构型设计模式。它向现有的系统添加一个高层接口,隐藏子系统的复杂性,这个接口使得子系统更加容易使用。如果你需要一个指向复杂子系统的直接接口,且该接口的功能有限,则可以使用外观模式。或者需要将子系统组织为多层结构,可以使用外观。作用让业务代码通过统一接口与内部子系统隔离。降低访问内部子系统时的复杂度,简化客户端之间的接口。实现步骤创建统一外观接口和实现类,用于衔接调用方与子系统。创建不同子模块/子模块,这些子模块可以共同实现某通用接口,也可以各自独立。通过统

【观察者设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

简介观察者模式(ObserverPattern)是一种行为型模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。观察者模式使用三个类Subject、Observer和Client。Subject对象带有绑定观察者到Client对象和从Client对象解绑观察者的方法。我们创建Subject类、Observer抽象类和扩展了抽象类Observer的实体类。作用一个对象状态更新,其他依赖对象收到通知和自动更新的机制。实现模块化分离,实现主题与观察者交互对象之间的松耦合。1)观察者定义了对象之间一对多的关系。2)被观察者(主题)用一个共同的

【原型设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

简介原型模式(PrototypePattern)是一种创建型设计模式,使你能够复制已有对象,而无需使代码依赖它们所属的类,同时又能保证性能。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。如果你需要复制一些对象,同时又希望代码独立于这些对象所属的具体类,可以使用原型模式。作用利用已有的一个原型对象,快速地生成和原型对象一样的实例。跳过构造函数的约束,便于提升性能。实现步骤创建原型接口,并声明克隆方法。使用new运算符调用原型版本的构造函数。将子类构造函数的直接调用,替换为对原型工厂方法的调用。UML Java代码基础原型抽象类//Sha

【模板方法设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

简介模板方法模式(TemplateMethodPattern)也叫模板模式,是一种行为型模式。它定义了一个抽象公开类,包含基本的算法骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构,只是重定义该算法的某些特定步骤。不同的子类以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。以此基于公共的模板,来实现实现不同的功能。模板模式适用于一些复杂操作进行步骤分割、抽取公共部分由抽象父类实现、将不同的部分在父类中定义抽象实现、而将具体实现过程由子类完成。对于有多个子类具有共有的方法,且逻辑相同,可以考虑作为模板方法。作用相同的部分父类给出统一的模板,子类大量复用,从而节省代码

【冒泡排序算法详解】Java/Go/Python/JS/C不同语言实现

Java/Go/Python/JS/C语言实现冒泡排序算法说明冒泡排序(BubbleSort)又称为泡式排序,是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。即通过遍历待排序的数列,一次比较两个元素,根据大小调换位置,直到把最大的或最小的冒出来。实现过程先建立两个循环,外循环用于遍历整个数组,内循环遍历待排序的区间。内循环每次都从第一项开始,将该项与待排序的后项逐个进行大小比较,再两两交换,将大的数字冒出来。重复第二项,一直到数组遍历完。示意图bubble1.pngbubble2.gif性能分析平均时间复杂度:O(N^2)最佳时间复杂度:

【快速排序算法详解】Java/Go/Python/JS/C不同语言实现

【快速排序算法详解】Java/Go/Python/JS/C不同语言实现说明快速排序(QuickSort),又称分区交换排序(partition-exchangesort),简称快排。快排是一种通过基准划分区块,再不断交换左右项的排序方式,其采用了分治法,减少了交换的次数。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归或迭代进行,以此让整个数列变成有序序列。实现过程在待排序区间找到一个基准点(pivot),便于理解一般是位于数组中间的那一项。逐个循环数组将小于基准

【中介者设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

简介中介者模式(MediatorPattern)是一种行为型模式。它限制对象之间的直接交互,它用一个中介对象来封装一系列的动作,以让对象之间进行交流。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。当一些对象和其他对象紧密耦合以致难以对其进行修改时,或当组件因过于依赖其他组件而无法在不同应用中复用时,可使用中介者模式。 作用用来降低多个对象和类之间的通信复杂性。对象之间不再显式地相互引用,但可以独立地改变它们之间的交互,从而保持松耦合。 实现步骤定义一个工具接口,供不同工具类来实现。建立多个具体工具类实现基础工具接口。定义一个基础抽象类,里面聚合了工具