【桥接设计模式详解】Java/JS/Go/Python/TS不同语言实现   简介 桥接模式(BridgePattern)是一种结构型设计模式,它将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构,来实现二者的解耦。参与桥接的接口是稳定的,用户可以扩展和修改桥接中的类,但是不能改变接口。桥接模式通过接口继承实现或者类继承实现功能扩展。 如果你希望在几个独立维度上扩展一个类,或者你想要拆分、重组一个具有多重功能的复杂类(例如能与多个数据库服务器进行交互的类),或者你想在运行时切换不同的实现方法,可以使用桥接模式。   作用 在有多种可能会变化的情况下,用继承...

  YfM6Ha87VKBP   2023年11月01日   77   0   0 设计模式

简介 建造者模式(BuilderPattern),也叫生成器模式,属于创建型模式。它使用多个简单的对象一步一步构建成一个复杂的对象。它允许你使用相同的创建代码生成不同类型和形式的对象。 当你希望使用代码创建不同形式的产品(例如各种商品和订单)时,一些基本部件不会变,而其组合经常变化的时候,就可以考虑建造者模式。   作用 当需要创建复杂对象的时候,由各个部分的子对象来逐步构建,以适应复杂多变的情况。 具体的建造者类之间是相互独立的,这有利于系统的扩展。 将变与不变分离开。主管类隐藏了产品构造细节,客户端只需要将一个生成器与主管类关联,就能从生成器处构造对象。   实现步...

  YfM6Ha87VKBP   2023年11月01日   68   0   0 设计模式

简介 命令模式(CommandPattern)是一种数据驱动的设计模式,也是一种行为型设计模式。这种模式的请求以命令的形式包裹在对象中,并传给调用对象。调用对象再寻找合适的对象,并把该命令传给相应的处理者。即把请求或操作封装成单个对象,并使其可以被参数化和延迟执行,这种方式将命令和执行者进行了有效解耦。 如果你需要通过操作来参数化对象,可使用命令模式。如果你想要将操作放入队列中、操作的执行或者远程执行操作,可使用命令模式。如果你想要实现操作回滚功能,可使用命令模式。 作用 将不同命令按照抽象命令封装成不同的对象,将这些命令放到调用者里。 客户通过调用者执行命令再去调用接受者的动作,顺序为:客...

  YfM6Ha87VKBP   2023年11月01日   299   0   0 设计模式

DesignPattern23种经典设计模式源码详解 经典设计模式源码详解,用不同语言来实现,包括Java/JS/Python/TypeScript/Go等。结合实际场景,充分注释说明,每一行代码都经过检验,确保可靠。 设计模式是一个程序员进阶高级的必然选择,不懂设计模式,就像写文章不懂得层次,盖房子没有结构。只有充分懂得设计之道,才能真正设计出良好的软件和系统来。 每一种语言都有自己的特色,设计模式首推用Java语言来实现,因为Java相对最全面,也非常规整。 其他语言有自己的优势,并不需要像Java那么啰嗦就可以实现良好的设计模式。因此通过不同语言之间的对比,可以更好地理解各种语言的差...

  YfM6Ha87VKBP   2023年11月01日   72   0   0 设计模式

简介 组合模式(CompositePattern),又叫部分整体模式,是一种结构型设计模式。用于把一组类似的对象当作一个单一的对象来看。组合模式依据树形结构来组合对象,用不同组件来构建某个部分或整体对象。 如果你需要实现树状对象结构,可以使用组合模式。如果你希望客户端代码以相同方式处理简单和复杂元素,可以使用该模式。 作用 符合开闭原则。无需更改现有代码,就可以在应用中添加新元素,使之成为对象树的一部分。 模糊了简单元素和复杂元素的概念,程序可以像处理简单元素一样来处理复杂元素,从而使得程序与复杂元素的内部结构解耦。 实现步骤 创建抽象构件(Component)接口,用于声明树叶构件和树...

  YfM6Ha87VKBP   2023年11月01日   75   0   0 设计模式

简介 装饰器模式(DecoratorPattern)是一种结构型设计模式。将对象放入到一个特殊封装的对象中,为这个对象绑定新的行为,具备新的能力,同时又不改变其原有结构。 如果你希望在无需修改代码的情况下即可使用对象,且希望在运行时为对象新增额外的行为,可以使用装饰模式。或者你用继承来扩展对象行为的方案难以实现或者根本不可行,你可以使用该模式。 作用 动态地给一个对象添加一些额外的职责,相比生成子类更为灵活。 在不想增加很多子类的情况下扩展类的能力,实现强大扩展能力。 实现步骤 创建一个基础工具接口或抽象类,设定基本的方法。 增加具体工具类实现基础接口,保持工具类的规范性。 创建一个装饰...

  YfM6Ha87VKBP   2023年11月01日   96   0   0 设计模式

简介 过滤器模式(FilterPattern)或标准模式(CriteriaPattern),是一种结构型模式。这种模式允许使用不同的标准条件来过滤一组对象,并通过逻辑运算的方式把各条件连接起来,它结合多个标准来获得单一标准。 例子将创建一个Person对象、Criteria接口和实现了该接口的实体类,来过滤Person对象的列表。Test类使用Criteria对象,基于各种标准和它们的结合来过滤Person对象的列表。   作用 可以通过层层筛选,过滤出自己想要的结果。 面向接口编程,将对象过滤,接口不依赖对象;对象无入侵,每次只需要增加规则就行了,不用修改过滤对象类。 &nbs...

  YfM6Ha87VKBP   2023年11月01日   134   0   0 设计模式

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

  YfM6Ha87VKBP   2023年11月01日   101   0   0 设计模式

简介 解释器模式(InterpreterPattern)是一种行为型设计模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式常被用在SQL解析、符号处理引擎等。 解释器模式常用于对简单语言的编译或分析实例中,为了掌握好它的结构与实现,必须先了解编译原理中的“文法、句子、语法树”等相关概念。   作用 可扩展性比较好,灵活,增加了新的解释表达式的方式,易于实现简单文法。 在语法树中的每个表达式节点类都是相似的,所以实现其文法较为容易。   实现步骤 创建抽象表达式接口(Expression),各种表达式都要实现该接口。 分别创建最终表达式和非最终表达...

  YfM6Ha87VKBP   2023年11月01日   81   0   0 设计模式

简介 迭代器模式(IteratorPattern),是一种结构型设计模式。给数据对象构建一套按顺序访问集合对象元素的方式,而不需要知道数据对象的底层表示。 迭代器模式是与集合共存的,我们只要实现一个集合,就需要同时提供这个集合的迭代器,就像Java中的Collection,List、Set、Map等,这些集合都有自己的迭代器。假如我们要实现一个这样的新的容器,就可以引入迭代器模式,给我们的容器实现一个迭代器。   作用 可以提供多种遍历对象的方式,把元素之间查找调用的责任交给迭代器,而不是聚合对象。 分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内...

  YfM6Ha87VKBP   2023年11月01日   63   0   0 设计模式

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

  YfM6Ha87VKBP   2023年11月01日   57   0   0 设计模式

简介 备忘录模式(MementoPattern)是一种结构型设计模式。这种模式就是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并放在外部存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。 备忘录模式的角色有三个:备忘录(Memento)角色、发起人(Originator)角色、负责人(Caretaker)角色 备忘录模式是由发起人(Originator)对象负责生成状态快照,其他对象不可修改状态。再将对象状态的副本存储在一个名为备忘录(Memento)的特殊对象中。除了创建备忘录的对象外,任何对象都不能访问备忘...

  YfM6Ha87VKBP   2023年11月01日   142   0   0 设计模式

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

  YfM6Ha87VKBP   2023年11月01日   124   0   0 设计模式

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

  YfM6Ha87VKBP   2023年11月01日   63   0   0 设计模式

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

  YfM6Ha87VKBP   2023年11月01日   108   0   0 设计模式

简介 单例模式(SingletonPattern)属于创建型设计模式,这种模式只创建一个单一的类,保证一个类只有一个实例,并提供一个访问该实例的全局节点。 当您想控制实例数目,节省系统资源,并不想混用的时候,可以使用单例模式。单例有很多种实现方式,主要分为懒汉和饿汉模式,同时要通过加锁来避免线程安全。不同语言的单例实现略有差异,可以通过查看不同版本的源码来深入理解其中的差异。   不同语言设计模式源码下载:https://github.com/microwind/design-pattern 作用 避免全局使用的类频繁地创建与销毁。 保证一个类仅有一个实例,并提供一个访问它的全局访...

  YfM6Ha87VKBP   2023年11月01日   80   0   0 设计模式

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

  YfM6Ha87VKBP   2023年11月01日   86   0   0 设计模式

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

  YfM6Ha87VKBP   2023年11月01日   75   0   0 设计模式

简介 访问者模式(VisitorPattern)是一种行为型模式。它封装一个访问者类,把各元素类的操作集合起来,目的是将数据结构与数据操作分离。在不改变原有元素类数据结构的前提下,改变了元素类的执行算法。 当某些较为稳定的东西(数据结构或算法),不想直接被改变但又想扩展功能,这时候适合用访问者模式。访问者模式的使用频率并不是很高,大多数情况下,你并不需要使用访问者模式,但是当你一旦需要使用它时,那你就是需要使用它了。 访问者模式有以下几个角色: 结构对象(ObjectStructure):结构对象角色,这是访问者模式的基础角色,包含多个类或者接口. 抽象元素(Element):定义一个接受访...

  YfM6Ha87VKBP   2023年11月01日   123   0   0 设计模式

说明 基数排序(RadixSort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。基数排序的发明可以追溯到1887年赫尔曼·何乐礼在列表机(TabulationMachine)上的贡献。基数排序的方式可以采用LSD(Leastsignificantdigital)或MSD(Mostsignificantdigital),LSD的排序方式由键值的最右边开始,而MSD则相反,由键值的最左边开始。LSD使用计数排序或桶排序,MSD可以使用桶排序。由低到高(LS...

  YfM6Ha87VKBP   2023年11月01日   66   0   0 算法与数据结构
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~