
设计模式
文章平均质量分 80
BUG弄潮儿
专注软件开发,分享开发、架构经验。全网同名,认准:bug弄潮儿
展开
-
设计模式之 外观模式
0x01:外观模式简介 外观模式(又称门面模式),通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性。UML类图如下: 其中Facade是外观角色,也叫门面角色,客户端可以调用这个角色的方法,此角色知晓子系统的所有功能和责任,将客户端的请求代理给适当的子系统对象; Subsystem是子系统角色,可以同时拥有一个或多个子系统,每一个子系统都不是一个单独的类,而是一个类的集合,子系统并不知道门面的存在。 0x02:外观模式的实现 定原创 2021-01-23 12:51:20 · 270 阅读 · 2 评论 -
桥接模式
0x01:桥接模式简介 桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化,而不会直接影响到其他部分。是一种对象结构型模式,又称接口(interface)模式。UML类图如下: 主要角色如下: Implementor:实现化角色,它是接口或者抽象类,定义角色必需的行为和属性;这个接口不一定要与Abstraction的接口完全一致,事实上这两个接口可以完全不同,一般而言,Implementor接口仅提供基本操作,而Abstraction定义的接口可能会做更多更复杂的操作。Implementor接原创 2021-01-11 20:40:41 · 264 阅读 · 0 评论 -
这就是命令,命令模式
0x01:命令模式简介 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个, 我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计。 命令模式:请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。 UML类图如下: 主要角色分析如下: Invoker:调用者,要求该命令执行这个请求,通常会持有命令对象,可以持有多个命令对象。这个是客户端真正触发命令并要求原创 2021-01-10 19:34:40 · 417 阅读 · 0 评论 -
好似你,饼印咁:原型模式、浅拷贝与深拷贝
0x01:原型模式简介 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。大概意思就是:允许一个对象再创建另外一个可定制的对象,根本无需知道对象创建的细节。其工作原理是通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。其UML类图如下: 主要角色如下: Prototype:为原型类,声明一个克隆自身的接口; ConcretePrototype:为具体实现类,实现一个克隆自身的操作; Client(客户端)只需让一个原型克隆自身原创 2021-01-09 14:06:29 · 330 阅读 · 0 评论 -
堆积木,建造者模式
0x01:建造者模式简介 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 假如一个对象的构建很复杂,需要很多步骤。则可以使用建造者模式,将其构建对象和组装成一个对象这两步给分开来。构建部分为(Builder)和组织部分(Director),实现了构建和装配的解耦。 主要角色如下: Builder:为创建一个产品对象的各个部件指定抽象接口,一般由子类实现; ConcreteBuilder:具体建造者,实现抽象类定义的所有方法,并且返回一个组建好的产品对象; Director:为指原创 2021-01-08 09:14:37 · 358 阅读 · 0 评论 -
人要衣装,佛要金装之装饰模式
0x01:装饰模式简介 装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 先看最近一个热点头条:环卫工大姐化妆后变美女 化妆前与化妆后判若两个人,所以各位小伙伴在追求另一半时,不要看走眼了。虽然老祖宗说:人美在心里,鸟美在羽毛,但是外表的美丽是我们的第一感观。闲话少说,言归正传,装饰模式的UML类图如下: 主要角色如下: 抽象构件(Component):定义一个对象接口或抽象类,可以给这些对象动态地添加职责; 具体构件(原创 2021-01-06 20:51:18 · 375 阅读 · 0 评论 -
调用像链子,责任链模式
0x01:责任链模式简介 在责任链模式中,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上进行传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。责任链模式的UML类图如下: 其中,Handler是抽象处理者,定义了一个处理请求的接口;ConcreteHandler是具体处理者,处理它所负责的请求,可访问它的后继者,如果可处理该请求就处理,否则就将该请求转发给它的后继者。原创 2021-01-05 09:54:21 · 238 阅读 · 0 评论 -
被用到炉火纯清的迭代器模式
0x01:迭代器模式简介 Java中可以说已经把迭代器模式用到了极致,每一个集合类都关联了一个迭代器类Iterator。 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。UML类图如下: 其中,Aggregate是聚集抽象类,负责提供创建具体迭代器角色的接口;Iterator是迭代抽象类,用于定义得到开始对象、得到下一个对象、判断是否到结尾、当前对象等抽象方法,统一接口;ConcreteAggregate是具体聚集类,继承Aggregate;Con原创 2021-01-03 11:15:48 · 252 阅读 · 1 评论 -
无处不在的适配器模式
0x01:适配器模式简介 对于适配器相信不会陌生,生活中的例子比比皆是,像耳机转接线,充电器适配器,水管适配接口等等。通过类比很容易理解软件中的适配器模式。 客户端需要一个target(目标)接口,但是不能直接重用已经存在的adaptee(适配者)类,因为它的接口和target接口不一致,所以需要adapter(适配器)将adaptee转换为target接口。前提是target接口和已存在的适配者adaptee类所做的事情是相同或相似,只是接口不同且都不易修改。如果在设计之初,最好不要考虑这种设计模式。凡事原创 2021-01-02 12:12:34 · 274 阅读 · 0 评论 -
设计模式之模板模式
0x01:模板模式 模板模式(Template),又叫模板方法模式(Template Method),在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需重写方法实现,但调用将以抽象类中定义的方式进行。模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤。UML类图如下: 主要包含如下角色: AbstractClass(抽象模板类):在抽象类中定义了一系列基本操作,这些基本操作可以是具体的,也可以是抽象的,每一个基原创 2020-12-07 21:33:02 · 316 阅读 · 0 评论 -
单例模式简单复杂,线程不安全到安全
0x01 :简介 说到单例模式,可以说单例模式是最常见,也是最常用的设计模式了。Spring的bean默认就是单例的。虽然单例模式是最简单的设计模式,但是在实现上有多种方式,分别是饿汉式、懒汉式、双重校验锁;在线程安全方面有线程不安全的,也有线程相对安全的。总的来说实现单例模式有以下一些特点: 1、私有的构造方法 2、内部创建一个私有成员变量 3、提供一个公开、静态的获取成员的方法 类图 0x02:饿汉模式 首先介绍一下最简单的单例模式(饿汉模式),这种方式在单例类被加载的时候实例化。 p原创 2020-11-18 20:25:51 · 363 阅读 · 0 评论