
设计模式
文章平均质量分 68
geek-wmy
一位专注的码农
展开
-
设计模式之访问者模式
访问者模式提供了一个作用于某对象结构中的各元素的操作表示,他使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式主要包含以下几个角色:Vistor(抽象访问者):为对象结构中每一个具体元素类声明一个访问操作,从这个操作的名称或参数类型可以清楚的知道需要访问的具体元素类型,具体访问者需要实现这些操作方法,定义对这些元素的访问操作。ConcreteVistor(具体访问者):实现了每一个由抽象访问者声明的操作,每一个操作用于访问对象结构中一种类型的元素。原创 2023-02-19 21:11:28 · 420 阅读 · 0 评论 -
设计模式之模板方法模式
模板方法模式定义了一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构就可以重定义该算法的某些特定步骤。模板方法模式主要包含几下几个角色:AbstractClass(抽象类):在抽象类中定义了一系列基本操作,这些操作可以是具体的,也可以是抽象的,每一个基本操作对应算法的一个步骤,在子类中可以重定义或实现这些步骤。同时在抽象类中实现了一个模板方法用于定义一个算法的框架,模板方法不仅可以调用抽象类中实现的方法,也可以调用子类中实现的基本方法。原创 2023-02-19 18:00:28 · 438 阅读 · 0 评论 -
设计模式之策略模式
策略模式定义了一系列算法类,将每一个算法封装起来,并让他们可以相互替换,策略模式让算法独立于客户端。策略模式主要包含以下几个角色:Context(环境类):使用算法的角色,在解决某个问题(即实现某个方法)时可以采用多种策略,在环境类中维持一个抽象策略类的引用实例,用于定义所采用的策略。Strategy(抽象策略类):为所支持的算法声明抽象方法,是所有策略类的父类,可以是抽象类或具体类,也可以是接口。环境类通过抽象策略类中声明的方法在运行时调用具体策略类中实现的方法。原创 2023-02-19 16:10:53 · 367 阅读 · 0 评论 -
设计模式之状态模式
状态模式是指允许一个对象在其内部状态改变时改变他的行为,对象看起来似乎改变了整个类。状态模式将一个对象在不同状态下的不同行为封装在一个个状态类中,通过设置不同的状态对象可以让环境对象拥有不同的行为,而状态转换的行为对客户端是透明的。状态模式主要包含以下几个角色:Context(环境):拥有多种状态的对象,由于环境类的状态存在多样性且在不同状态下对象的行为有所不同,因此将状态独立出来形成单独的状态类。原创 2023-02-18 16:42:25 · 581 阅读 · 0 评论 -
设计模式之观察者模式
观察者模式定义了对象之间一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象都能收到通知并自动刷新。观察者模式主要包含以下几个角色:Subject(目标):指被观察的对象,在目标中定义了一个观察者集合,一个观察目标可以接受任意数量的观察者来观察。提供了一系列方法来增加,删除观察者对象,同时也定义了通知方法。目标类可以是接口也可以是抽象类。ConcreteSubject(具体目标):目标类的子类,通常包含经常发生改变的数据,当他的状态发生改变时,向他的各个观察者发出通知。原创 2023-02-18 11:38:56 · 545 阅读 · 0 评论 -
设计模式之备忘录模式
备忘录模式是指在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将该对象恢复到原先保存的状态。备忘录模式主要包含以下几个角色:Originator(原发器):是一个普通类,可以创建一个备忘录,并存储当前的内部状态,也可以使用备忘录来恢复其内部状态,一般将需要保存内部状态的类设计为原发器。Memento(备忘录):存储原发器的内部状态,根据原发器来决定保存哪些内部状态。备忘录的设计一般可以参考原发器的设计,根据实际需要确定备忘录类中的属性。原创 2023-02-16 21:07:05 · 107 阅读 · 0 评论 -
设计模式之中介者模式
中介者模式是指用一个中介对象来封装一系列的对象交互,中介者使各个对象不需要显式的相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。中介者模式主要包含以下几个角色:Mediator(抽象中介者):定义了与各同事对象之间进行通信的接口。ConcreteMediator(具体中介者):协调各个同事对象来实现协作行为,维持了各个同事对象的引用。原创 2023-02-14 21:31:18 · 250 阅读 · 0 评论 -
设计模式之迭代器模式
迭代器模式是提供一种方法来访问聚合对象,而不用暴露这个对象的内部结构。迭代器模式主要包含以下几个角色:Iterator(抽象迭代器):定义了访问和遍历元素的接口,声明了用于遍历数据元素的方法。ConcreteIterator(具体迭代器):实现了抽象迭代器接口,完成对聚合对象的遍历,同时在具体迭代器中通过下标来记录在聚合对象中所处的当前位置。Aggregate(抽象聚合类):用于存储和管理元素对象。ConcreteAggregate(具体聚合类):实现了抽象聚合类中的方法。原创 2023-02-12 20:51:22 · 320 阅读 · 1 评论 -
设计模式之解释器模式
解释器模式定义了一个语言的文法,并且建立一个解释器来解释语言中的句子。解释器模式主要包含以下几个角色:AbstractExpression(抽象表达式):声明了抽象的解释操作。TerminalExpression(终结符表达式):抽象表达式的子类,实现了与文法中终结符相关的解释操作,文法中的每一个终结符都有一个终结表达式。原创 2023-02-12 15:29:51 · 437 阅读 · 0 评论 -
设计模式之命令模式
命令模式是指将一个请求封装为一个对象,从而让我们可以用不同的请求对客户进行参数化。命令模式可以将请求者和接受者解耦,发送请求对象只需要知道如何发送即可。命令模式主要包含以下几个角色:Command(抽象命令类):一般是抽象类或者接口,声明了执行请求的方法,通过这些方法可以调用接受者的相关操作。ConcreteCommand(具体命令类):实现了抽象命令类中声明的方法,对应具体的接受者对象,调用了接受者对象的方法。Invoker(调用者):即请求发送者,通过命令对象来执行请求。原创 2023-02-11 21:33:43 · 488 阅读 · 0 评论 -
设计模式之职责链模式
职责链模式是避免请求发送者与接受者耦合在一起,让多个对象都可以接受到请求,从而将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理为止。职责链模式包含以下几个角色:Handler(抽象处理者):定义处理请求的接口,一般是抽象类。由于不同的具体处理类处理请求的方式不同,因此在其中定义抽象处理请求的方法。因为每一个处理这的下家还是处理者,因此在抽象处理者中定义一个抽象处理者类型的对象作为下家的引用。原创 2023-02-09 21:16:01 · 583 阅读 · 0 评论 -
设计模式之代理模式
代理模式是指给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。代理对象在客户端和目标对象之间起到中介的作用。代理模式包含以下几个角色:Subject(抽象主题角色):声明了真实主题和代理主题的共同接口,这样在任何使用真实主题的地方都可以使用代理主题。客户端通常需要针对抽象主题角色编程。Proxy(代理主题角色):包含了对真实主题的引用,从而可以在任何时候操作真实主题对象。在代理主题角色中提供一个与真实主题角色相同的接口,以便在任何时候都可以替代真实主题。原创 2023-02-06 21:56:07 · 422 阅读 · 1 评论 -
设计模式之享元模式
享元模式是指运用共享技术有效的支持大量细粒度对象的复用。系统只使用少量的对象,而这些都很相似,状态变化小,可以实现对象的多次复用。享元模式中对象实现共享的关键是区分了内部状态和外部状态:内部状态:存储在对象内部并且不会随环境改变而改变的状态,内部状态可以共享。外部状态:随环境改变而改变,不可以共享的状态,是由客户端传入对象内部。多个外部状态之间是相互独立的。原创 2023-02-05 12:40:19 · 463 阅读 · 0 评论 -
设计模式之外观模式
外观模式是指为子系统中的一组接口提供一个统一的入口,外观模式定义了一个高层接口,这个接口使得子系统更加容易使用。外观模式是迪米特法则的具体实现,为子系统的外部与其内部的通信通过一个统一的外观类进行,外观类将客户端与子系统的内部复杂性分隔开,客户端只需要与外观类交互。外观模式包含以下几个角色:Facade(外观角色):在客户端调用他的方法,在外观角色中可以知道相关子系统的功能与职责,将客户端过来的请求传递到对应的子系统中。原创 2023-02-04 11:08:08 · 481 阅读 · 0 评论 -
设计模式之装饰模式
装饰模式是指动态地给一个对象增加额外的职责,就增加对象功能来说,装饰模式比生成子类实现更加灵活。装饰模式是一种用于替代继承的技术,通过使用对象之间关联关系替代之前的父子类的继承关系。在装饰模式中引入装饰类,在装饰类中既可以调用原有方法,也可以增加新方法。装饰模式包含以下几个角色:Component(抽象构件):是具体构件和抽象装饰类的公共父类,声明了在具体构件中实现的业务方法。原创 2023-01-29 19:36:08 · 617 阅读 · 0 评论 -
设计模式之组合模式
组合模式是指组合多个对象形成树形结构以表示具有"整体-部分"关系的层次结构。组合模式对单个对象和组合对象的使用具有一致性。组合模式包括以下几个角色:Component(抽象构件):可以是接口或者抽象类,为叶子构件对象或容器构件对象声明接口,该角色中可以包含所有子类共有行为的声明和实现。Leaf(叶子构件):实现了抽象构件中声明的方法,该对象没有下级对象。Composite(容器构件):该角色包含下级对象。原创 2023-01-26 14:22:32 · 768 阅读 · 0 评论 -
设计模式之桥接模式
桥接模式是将他的抽象部分与实现部分分离,使他们都可以独立地变化。 桥接模式包含以下几个角色: Abstraction(抽象类):用于定义抽象类,一般是抽象类不是接口,该类中定义了一个实现类接口类型的对象并可以维护该对象,并且与实现类接口有关联关系,该抽象类即可以包含抽象业务方法,也可以包含具体业务方法。 RefinedAbstraction(扩展抽象类):扩展由Abstraction定义的接口,通常情况下为具体类,实现了在Abstraction中声明的抽象业务原创 2023-01-25 14:09:47 · 945 阅读 · 0 评论 -
设计模式之适配器模式
适配器模式是将一个接口转换成客户希望的另一个接口,使得一个类的接口和另一个类的接口匹配起来,无需修改原来的接口内容。在适配器模式中,我们通过增加一个新的适配器类来解决接口兼容问题。使得原本没有任何关系的类可以协同工作。根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器和类适配器。在对象适配器模式中,适配器和适配者之间是关联关系;在类适配器模式中,适配器和适配者之间是继承或实现关系。实际开发中对象适配器的适用频率更高。原创 2023-01-23 11:57:35 · 578 阅读 · 0 评论 -
设计模式之原型模式
原型模式是指使用原型实例指定创建对象的类型,并通过拷贝这些原型创建新的对象。原型模式的原理是将一个原型对象传给要创建的对象,这个要创建的对象通过请求原型对象拷贝自己来实现创建过程。原型模式包含以下几个角色:Prototype(抽象原型):声明克隆方法的接口,是所有具体类型的公共父类,可以是抽象类也可以是接口,甚至可以是具体实现类。ConcretePrototype(具体原型):实现在抽象原型类中什么的克隆方法,在克隆方法中返回自己的一个新的克隆对象。原创 2023-01-22 16:49:52 · 1851 阅读 · 0 评论 -
设计模式之工厂方法模式
工厂方法模式定义了一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到子类。与简单工厂模式相比,在新加入产品时工厂模式不需要修改工厂类,符合开闭原则。而且简单工厂模式中存在大量的if…else…代码,工厂类过于庞大加大了维护难度。工厂方法模式包含以下几个角色:Product(抽象产品):定义产品的接口,是工厂模式所创建对象的公共父类。原创 2023-01-22 13:58:10 · 1526 阅读 · 0 评论 -
设计模式之单例模式
单例模式是为了确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类就是单例类。提供了全局访问的方法。单例模式有三个要点:1.某个类只能有一个实例2.必须自行创建这个实例3.必须自行向整个系统提供这个实例单例模式只包含一个角色:Singleton(单例):在单例类的内部实现只生成一个实例,同时他提供一个静态的getInstance()方法,让客户端可以访问他的唯一实例,为了防止在外部对其实例化,将其构造方法设置为私有。原创 2023-01-20 09:59:38 · 1591 阅读 · 0 评论 -
设计模式之简单工厂模式
工厂模式是最常用的一类创建型设计模式。它不属于GoF 23种设计模式。它的设计思想很简单,基本流程:首先将需要创建的不同对象封装到不同的具体产品类中,将公共部分进行抽取后封装到一个抽象产品类中,每一个具体产品类都是抽象产品类的子类。然后提供一个工厂类用于创建各种产品,在工厂类中提供一个创建产品类的方法,该方法可以根据所传入的参数不同创建不同的具体产品对象,客户端只需要调用工厂类的工厂方法。简单工厂模式是说定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。原创 2023-01-15 20:56:10 · 592 阅读 · 0 评论 -
设计模式之建造者模式
建造者模式将客户端与包含多个组成部分的复杂对象的创建过程分离,客户端无需知道复杂对象的内部组成部分与装配方式。它关注如何一步步创建一个复杂对象,不同的具体建造者定义了不同的创建过程,且具体建造者相互独立,增加新的建造者非常方便。建造者模式是指将一个复杂对象的构建与它的表示相分离,使得同样的构建过程可以创建不同的表示。原创 2023-01-15 15:38:07 · 604 阅读 · 0 评论 -
设计模式之抽象工厂模式
抽象工厂模式提供了一个创建一系列相关或相互依赖对象的接口,而无需指定他们的具体类。该模式属于创建型设计模式。。抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂中的具体工厂不只是创建一个产品,而是创建一组产品。在抽象工厂模式中,每一个具体工厂都提供了多个工厂方法用于生产多种不同的产品,这些产品组成一个产品组。在工厂方法模式中具体工厂只负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法具有唯一性。一般情况下,一个具体工厂只有一个或一组重载的工厂方法。原创 2023-01-14 15:56:03 · 589 阅读 · 0 评论 -
什么是设计模式,设计模式的分类和原则
设计模式是我们在软件开发过程中,基于特定情况的下为一些重复性出现的问题提供的一个有效的解决方案。无论是在框架还是应用软件的开发中,设计模式的在被广泛的应用。设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码可靠性。原创 2023-01-08 21:58:31 · 427 阅读 · 0 评论