Design Pattern
文章平均质量分 66
模式设计相关知识
Tech In Pieces
这个作者很懒,什么都没留下…
展开
-
用故事的形式去讲述23种设计模式
01工厂方法追 MM 少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是 MM 爱吃的东西,虽然口味有所不同,但不管你带 MM 去麦当劳或肯德基,只管向服务员说「来四个鸡翅」就行了。麦当劳和肯德基就是生产鸡翅的 Factory 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。02建造者模式MM 最爱听的就是「我爱你」这句话了,见到不同地方的 MM,要能够用她们的.原创 2021-06-09 06:00:33 · 325 阅读 · 0 评论 -
通俗易懂的最常见的几种策略模式--使用场景及如何实现
策略模式:适用场景:当不同的行为堆砌在一个类中时,就很难避免使用条件语句来选择合适的行为。讲这些行为封装在一个个独立的Strategy类中,可以在使用这些行为的类中消除条件语句。就是说,针对不同场景,我们应该避免使用过多的if else语句,而是对这些if else中的语句(我们称之为策略,不同场景下选择不同的策略)进行独立建类,称之为 策略类。如何实现:代理模式:使用场景:这个模式很好理解,就是加入一个中间人,至于为什么想要加入这个中间人,可能的原因如下:当我们想要隐藏某个类,或者当一个类需要对不原创 2021-05-20 09:22:56 · 614 阅读 · 0 评论 -
【图解设计模式系列】The Proxy Pattern: 代理模式
定义:代理模式给某一个对象提供了一个代理对象,并由代理对象控制对原对象的引用。在一些情况下,一个客户端不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介作用。Proxy Patternprovides a surrogate or placeholder for another object to control access to it.Use the proxy pattern to create a representative object that control原创 2020-12-30 05:16:52 · 294 阅读 · 0 评论 -
【图解设计模式系列】The Decerator Pattern: 装饰器模式
装饰器模式又叫做包装模式(Wrapper)。装饰器模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。在以下情况下应该使用装饰器模式:1.需要扩展一个类的功能,或给一个类增加附加责任2.需要动态的给一个对象增加功能,这些功能可以再动态的撤销3.需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使其继承关系变的不现实。英文解释:attaches additional responsibilities to an object dynamically. Decorators原创 2020-12-30 05:16:42 · 290 阅读 · 0 评论 -
【图解设计模式系列】The Adapter Pattern: 适配器模式
适配器模式是将一个类的接口转换成客户希望的另一个接口,从而让那些接口不兼容的类可以一起工作。converts the interface of a class into another interface the clients expect. Adapter lets classes works together that couldn’t otherwise because of incompatible interfaces.适配器模式包含一下三个角色:Target(目标抽象类):目标抽象原创 2020-12-30 05:16:31 · 309 阅读 · 2 评论 -
【图解设计模式系列】The Facade Pattern: 外观模式
外观模式通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。外观模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。外观模式包含如下几个角色:外观(Facade)角色 :为多个子系统对外提供一个共同的接口。子系统(SubSystem)角色 :实现系统的部分功能,客户可以通过外观角色访问它。实例搭建一个家庭影院系统,系统内包含设备:DVD播放器、投影机、自动屏幕、立体声音响、爆米花机。定义这些媒体类:原创 2020-12-30 05:16:20 · 338 阅读 · 0 评论 -
【图解设计模式系列】The Bridge Pattern: 桥接模式
桥接模式是用于把抽象化与实现化解耦,使得二者可以独立变化。这种模式涉及一个接口,作为一个桥梁,使得具体类的功能独立于接口实现类。两种类型的类可以在结构上改变而不彼此影响。桥接模式包含如下几个角色:Abstraction:抽象类角色。定义抽象类的接口并维护指向Implementor类的对象指针。RefinedAbstraction:扩充抽象类。扩充Abstraction定义的接口。Implementor:定义实现类的接口,该接口不一定要与Abstraction的接口完全一致。事实上这两个接口可以完全原创 2020-12-29 07:17:48 · 180 阅读 · 0 评论 -
【图解设计模式系列】The Composite Pattern: 组合模式
组合模式是将对象组合成树形结构以表示 “部分-整体” 的层次结构,使得用户对单个对象和组合对象的使用具有一致性。英文解释allows you to compose objects into tree structures to represent part-whole hierarchies. Composite lets clients teat individual objects and compositions of objects uniformly.allows us to build s原创 2020-12-29 07:02:43 · 245 阅读 · 0 评论 -
【图解设计模式系列】The Flyweight Pattern: 享元模式
享元模式是运用共享技术有效地支持大量细粒度的对象。**一个典型的应用场景就是用来实现各种池了,比如String常量池、数据库连接池、缓冲池等等都是享元模式的应用,所以说享元模式是池技术的重要实现方式。**享元模式主要为了解决大量类似对象占用大量内存的现象,因为内存是珍贵的资源,所以我们讲这些相似对象进行归类,提取出相同部分用以共享,这样可以非常明显的节省内存开销,但要记住一个前提,在节省内存的同时,我们是加大了代码运行时间为前提的,所以,有的时候我们需要平衡时间和内存开销。在享元模式结构图中包含如下几个原创 2020-12-29 06:57:15 · 107 阅读 · 0 评论 -
【图解设计模式系列】The Prototype Pattern: 原型模式
定义:原型模式是一种对象创建型模式,它采取复制原型对象的方法来创建对象的实例。使用原型模式创建的实例,具有与原型一样的数据。原型模式的三个特点:1.由原型对象自身创建目标对象。也就是说,对象创建这一动作发自原型对象本身。2.目标对象是原型对象的一个克隆。也就是说,通过Prototype模式创建的对象,不仅仅与原型对象具有相同的结构,还与原型对象具有相同的值。3.根据对象克隆深度层次的不同,有浅克隆与深克隆。原型模式的三个应用场景在创建对象的时候,我们不只是希望被创建的对象继承其基类的基本结原创 2020-12-29 06:40:07 · 179 阅读 · 0 评论 -
【图解设计模式系列】The Abstract Factory Pattern: 抽象工厂模式
定义:抽象工厂模式提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。provides an interface for creating families of related or dependent objects without specifying their concrete classes.Factory method create objects through inheritance. Abstract factory do it through object co原创 2020-12-29 06:09:13 · 241 阅读 · 0 评论 -
【图解设计模式系列】The Factory Method Pattern: 工厂方法模式
定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法模式使得一个类的实例化延迟到了其子类。看着定义 意思就是说 接口-子类模式就是属于这种模式,就是说要尽可能的多建立接口,而不是建立实体类让子类继承。英文解释:encapsulates object creation by letting subclasses decide what objects to createdefines an interface for creating an object, but lets subclass原创 2020-12-29 05:41:37 · 217 阅读 · 0 评论 -
【图解设计模式系列】The Builder Pattern: 建造者模式
创建者模式使用多个简单的对象一步一步构建成一个复杂的对象。它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象,该 Builder 类是独立于其他对象的。通过描述我们就能才出来一个大概:我们想构造一个比较复杂的对象的话 就需要用到这种模式,比如说我们用RestAPI 返回的那些被封装的复杂对象。就是用到这种模式。创建者模式包括以下几种角色:Builder:为创建一个Product对象的各个部件指定抽象接口。ConcreteBuilder:实现Builder的接口以构造原创 2020-12-29 05:15:22 · 128 阅读 · 0 评论 -
【图解设计模式系列】The Singleton Pattern: 单例模式
单例模式主要作用是保证在应用程序中,一个类只会有一个实例存在。典型的应用场景,比如文件系统建立目录,或数据库连接都需要这样的单例。实现单例模式常用的几种方式有饿汉式、懒汉式、懒汉双检索式、内部类实现式、枚举实现式等。看完这个定义 仍然不知道到底是什么意思。英文解释ensures a class has only one instance, and provides a global point of access to it.The above solution has multithreadin原创 2020-12-29 04:55:12 · 173 阅读 · 0 评论 -
【图解设计模式系列】The Command Pattern: 命令行模式
命令模式是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。仔细想一下 这不就是命令行的底层实现嘛?自己之前一直都在使用命令行,而从来没有想过到底是怎么实现的,只需短短键入几个字符就能得到想要的结果。但是同时 有时候命令太多记不住也很头疼,而且有的时候,如果你不知道某个命令可以做这个事情 那么挫败感就会很强。英文解释:encapsulates a request as an obj原创 2020-12-29 04:13:44 · 271 阅读 · 0 评论 -
【图解设计模式系列】The Interpreter Pattern: 解释器模式
解释器模式提供了一种评估计算语言语法或表达式的方法。 这种类型的模式属于行为模式。 这种设计模式涉及实现一个表达式接口,它告诉解释一个指定的上下文。 此模式用于SQL解析,符号处理引擎等。从上面的描述中我们就可以看出来,这个模式用于一些很底层的语句解析解释器模式包含以下主要角色。**抽象表达式(Abstract Expression)**角色:定义解释器的接口,约定解释器的解释操作,主要包含解释方法 interpret()。**终结符表达式(Terminal Expression)**角色:原创 2020-12-29 00:56:31 · 175 阅读 · 0 评论 -
【图解设计模式系列】The Mediator Pattern: 中介者模式
什么是中介者模式?中介者模式用一个中介对象来封装系列对象之间的交互。中介者使各个对象不需要显式地相互引用,从而使其耦合性松散,并且可以独立地改变他们之间的交互。中介者模式主要包含如下几个角色:Mediator: 抽象中介者。定义了同事对象到中介者对象之间的接口。ConcreteMediator: 具体中介者。实现抽象中介者的方法,它需要知道所有的具体同事类,同时需要从具体的同事类那里接收信息,并且向具体的同事类发送信息。Colleague: 抽象同事类。ConcreteColleague: 具原创 2020-12-28 09:43:59 · 163 阅读 · 0 评论 -
【图解设计模式系列】The Visitor Pattern: 访问者模式
什么是访问者模式?**访问者模式提供一个作用于某对象结构中的各元素的操作表示,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。**访问者模式是一种对象行为型模式,它包含访问者和被访问元素两个主要组成部分,这些被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行不同的访问操作。例如处方单中的各种药品信息就是被访问的元素,而划价人员和药房工作人员就是访问者。访问者模式使得用户可以在不修改现有系统的情况下扩展系统的功能,为这些不同类型的元素增加新的操作。在使用访问者模式时,被访问元素原创 2020-12-28 09:23:41 · 125 阅读 · 0 评论 -
【图解设计模式系列】The Memento Pattern: 备忘录模式
什么是备忘录模式?备忘录模式用来恢复一个对象的状态到以前的状态。 通俗的说,就是把一个类的属性临时的保存在另一个地方,并提供一个接口可以还原,比较适用的场景是系统升级,代码回滚。(之前一直奇怪系统升级怎么升级)此模式包含三个角色:Originator(原发器):它是一个普通类,可以创建一个备忘录,并存储它的当前内部状态,也可以使用备忘录来恢复其内部状态,一般将需要保存内部状态的类设计为原发器。Memento(备忘录):存储原发器的内部状态,根据原发器来决定保存哪些内部状态。备忘录的设计一般可以参原创 2020-12-28 09:06:58 · 186 阅读 · 0 评论 -
【图解设计模式系列】The Iterator Pattern: 迭代器模式
什么是迭代器模式?它提供一种方法顺序的访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。英文解释:provides a way to access the elements of an aggregate object sequentially without exposing its underlying representation.那么它究竟是怎么样实现而又不暴漏内部组成呢?首先 我们看一下一个整洁一点的结构图。这个模式包含以下四个角色:抽象聚合(Aggregate)角色:定原创 2020-12-28 08:52:59 · 180 阅读 · 0 评论 -
【图解设计模式系列】The Template Method Pattern: 模板方法模式
定义:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法模式使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。图解:然后我看了看实例 这种模式实际上就是鼓励我们多用接口来尽可能的把同类东西抽象到一个,就像猫是个抽象类,什么时候我们发现一个新品种的猫 我们就实现一个继承实现这个猫接口的实体猫类,比如英短猫。实例借用网上的例子。把大象装进冰箱分三步:1、把冰箱门打开; 2、把大象装进去; 3、把冰箱门关上public abstract class AbstractOp原创 2020-12-28 08:35:00 · 175 阅读 · 0 评论 -
【图解设计模式系列】The Observer Pattern: 观察者模式
什么是观察者模式?这可真的是个奇怪的命名,完全不明白为什么这样命名?看看定义:定义对象间的一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。观察者模式又被称为发布-订阅模式(publish-subscribe)。英文解释:Publishers (Subject) + Subscribers (Observers) = Observer Patterndefines a one to many dependency between objects so原创 2020-12-28 08:23:34 · 303 阅读 · 0 评论 -
【图解设计模式系列】The Chain of Responsibility Pattern: 责任链模式
责任链模式是一种对象的行为模式。在该模式中,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。包括以下几个角色:Handler:定义职责的接口,通常在这里定义处理请求的方法,可以在这里实现后继链。ConcreteHandler:实现职责的类,在这个类中,实现对在职责范围内请求的处理,如果不处理,就继续转发请求给后继原创 2020-12-28 08:13:54 · 182 阅读 · 0 评论 -
【图解设计模式系列】The State Pattern: 状态模式
1 allows an object to alter its behavior when its internal state changes. The object will appear to change its class.2 The State Pattern has the same class diagram as The Strategy Pattern, but they differ in intent.看了上面两行狗屁不通的抽象话状态模式也称状态机(State Machine)原创 2020-12-28 05:20:54 · 296 阅读 · 0 评论 -
【图解设计模式系列】The Strategy Pattern: 策略模式
11原创 2020-12-28 04:19:18 · 351 阅读 · 0 评论 -
【图解设计模式系列】23句话总结23种设计模式
首先 我们为什么需要设计模式?其实 我们不需要把他们想象成一个很复杂很高级的东西。这些东西其实都是经验之谈,经过了千千万万程序员的总结思考得出来的。如果你写的代码足够多,自然你也会思考如何让代码写的更清楚。所以这些设计模式是为了更好的让我们上手写出更整洁优秀的代码,所以 设计模式不是不变的 而是随着时代的变化而变化,有一些新的设计模式被提出来 有一些旧的设计模式很少用。所以总结性的来说 我们需要设计模式 是因为我们想把代码写的:降低对象之间的耦合,增加程序的可复用性、可扩展性、可维护性。设计模式有哪些原创 2020-12-28 03:02:36 · 216 阅读 · 0 评论 -
为什么if else过多会影响程序性能?(英文版)
“If else” uses in the following two scenarios: exception logical process and different condition process.1 Why will it affect the performance of the program?When we have a short code, it won’t effect too much, but when we have a large program with lots o原创 2020-12-26 00:13:11 · 499 阅读 · 0 评论 -
Few Techniques about Refactor Your Code 代码重构技巧(英文版)
1 If some method includes a part that is long or needs lots of comments to let people understand, then we can consider to divide it into a few smaller method units.It is like: when a function needs to print a display of the sum of an array and it’s inform原创 2020-12-25 22:51:41 · 629 阅读 · 0 评论 -
代码重构心得
所谓重构,之前的理解大多是:针对重复代码的封装提炼,针对过多if-else结构的整合。然而,在实际操作中,存在很多重构方法。重复代码提炼寻找代码中完成某项子功能的重复代码,将之封装成独立函数,必要时进行调用。class GoodExample { public void someMethod1(){ //code someMethod3(); //code } public void someMethod2(){原创 2020-07-12 22:55:06 · 267 阅读 · 0 评论 -
MVC/Delegate设计模式在软件开发中的流程体现
(1)Http请求:客户端请求提交到DispatcherServlet。(2)寻找处理器:由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller。(3)调用处理器:DispatcherServlet将请求提交到Controller。(4)(5)调用业务处理和返回结果:Controller调用业务逻辑处理后,返回ModelAndView。(6)(7)处理视图映射并返回模型: DispatcherServlet查询一个或多个ViewRes原创 2020-12-16 07:09:15 · 170 阅读 · 0 评论