JAVA设计模式与设计原则
文章平均质量分 80
详细解析JAVA中常用的设计模式,以及解释JAVA开发中应当遵守的一些设计原则。
共勉:让设计模式自然而然的出现在你的设计中,而不是为了使用设计模式而使用!!!
Funnee
Java,Javascript,Vue,SpringBoot
展开
-
JAVA设计模式(十八) -- 备忘录模式
一、概念备忘录(Memento)模式又称标记(Token)模式。GOF 给备忘录模式的定义为:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。二、组成结构1) 备忘录(Memento)角色: 备忘录角色存储“备忘发起角色”的内部状态。“备忘发起角色”根据需要决定备忘录角色存储“备忘发起角色”的哪些内部状态。为了防止“备忘...原创 2019-08-27 12:01:37 · 96 阅读 · 0 评论 -
JAVA设计模式(十七) -- 状态模式
一、概念状态模式:允许一个对象在其内部状态改变时改变它的行为。二、组成结构1 ) 使用环境(Context)角色: 客户程序是通过它来满足自己的需求。它定义了客户程序需要的接口;并且维护一个具体状态角色的实例,这个实例来决定当前的状态。2 ) 状态(State)角色: 定义一个接口以封装与使用环境角色的一个特定状态相关的行为。3 ) 具体状态(Concrete State)角色: 实现状...原创 2019-08-26 11:45:28 · 121 阅读 · 0 评论 -
JAVA设计模式(十六) -- 责任链模式
一、概念责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。二、责任链模式的组成结构抽象处理者角色(Handler): 它定义了一个处理请求的接口。当然对于链子的不同实现,也可以在这个角色中实现后继链。具体处理者角色(Concrete Handler): 实现抽象角色中定义的接口,并处理...原创 2019-08-23 17:46:23 · 160 阅读 · 0 评论 -
JAVA设计模式(十五) -- 观察者模式与发布-订阅模式
观察者(Observer)模式又名发布-订阅(Publish/Subscribe)模式。GOF 给观察者模式如下定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。(一)观察者模式的组成部分1) 抽象目标角色(Subject):目标角色知道它的观察者,可以有任意多个观察者观察同一个目标。并且提供注册和删除观察者对象的接口。目标角色往往由...原创 2019-08-02 18:23:42 · 223 阅读 · 0 评论 -
JAVA设计模式(十四) -- 模版方法模式
模板方法(Template Method)模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这里的算法的结构,可以理解为你根据需求设计出来的业务流程。特定的步骤就是指那些可能在内容上存在变数的环节。模版方法模式的结构:1) 抽象类(Abstract Class):定义了一到多个的抽象方法,以供具体的子类来实现它们;而且还...原创 2019-07-19 11:47:26 · 139 阅读 · 0 评论 -
JAVA设计模式(十三) -- 享元模式
享元模式英文称为“Flyweight Pattern”,又译为羽量级模式或者蝇量级模式。享元模式的定义为:采用一个共享类来避免大量拥有相同内容的“小类”的开销。这种开销中最常见、直观的影响就是增加了内存的损耗。享元模式以共享的方式高效的支持大量的细粒度对象,减少其带来的开销。事物之间都是不同的,但是又存在一定的共性,如果只有完全相同的事物才能共享,那么享元模式可以说就是不可行的;因此我们应该尽量...原创 2019-07-19 01:24:46 · 135 阅读 · 0 评论 -
JAVA设计模式(十二) -- 桥梁模式
GOF 在《设计模式》中给桥梁模式的定义为:将抽象部分与它的实现部分分离,使它们都可以独立地变化。这里的抽象部分和实现部分不是我们通常认为的父类与子类、接口与实现类的关系,而是组合关系。也就是说,实现部分是被抽象部分调用,以用来完成(实现)抽象部分的功能。桥梁模式由如下四种角色组成:1) 抽象角色(Abstraction ):它定义了抽象类的接口而且维护着一个指向实现(Implementor)...原创 2019-07-18 11:28:00 · 156 阅读 · 0 评论 -
JAVA设计模式(十一) -- 门面模式
门面模式(facade)又称外观模式。GOF在《设计模式》一书中给出如下定义:为子系统中的一组接口提供一个一致的界面, Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。...原创 2019-07-13 14:09:28 · 151 阅读 · 0 评论 -
JAVA设计模式(十) -- 建造者模式
建造者模式的定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。简言之,将构造复杂对象的过程和组成对象的部件解耦。当要生成的产品有复杂的内部结构——比如由多个对象组成;而系统中对此产品的需求将来可能要改变产品对象的内部结构的构成,比如说产品的一些属性现在由一个小对象组 成,而更改后的型号可能需要 N个小对象组成;而且不能将产品的内部构造完全暴露给客 户程序,一是为了...原创 2019-07-13 09:55:22 · 267 阅读 · 0 评论 -
JAVA设计模式(九) -- 适配器模式
将一个类的接口转换成客户希望的另外一个接口。适配器模式(Adapter)使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。GOF将适配器模式分为类适配器模式和对象适配器模式。区别仅在于适配器角色对于被适配角色的适配是通过继承完成的还是通过组合来完成的。GOF提倡使用组合来代替继承。(一)适配器模式的组成结构1) 目标(Target)角色:定义 Client 使用的接口。2) 被...原创 2019-07-12 15:56:00 · 110 阅读 · 0 评论 -
JAVA设计模式(八) -- 原型模式
原型模式属于对象创建模式,GOF 给它的定义为:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。(一)概念梳理浅复制与深复制概念1.浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。2.深复制(深克隆) 被复制对象的所有变量都含有与原来的对象相同的值...原创 2019-07-12 11:52:40 · 96 阅读 · 0 评论 -
JAVA设计模式(七) -- 代理模式
代理模式的定义为:为其他对象提供一种代理以控制对这个对象的访问。说白了就是,在一些情况下客户不想或者不能直接引用一个对象,而代理对象可以在客户和目标对象之间起到中介作用,去掉客户不能看到的内容和服务或者增添客户需要的额外服务。根据GOF对代理模式的分类,常见的代理模式如下:1 ) 远程(Remote)代理:为一个位于不同的地址空间的对象提供一个局域代表对象。比如:你可以将一个在世界某个角落一...原创 2019-07-11 11:05:03 · 186 阅读 · 0 评论 -
JAVA设计模式(六) -- 组合模式
组合(Composite)模式的其它翻译名称也很多,比如合成模式、树模式等等。GOF给出的定义是:将对象以树形结构组织起来,以达成“部分-整体”的层次结构,使得客户端对单个对象和组合对象的使用具有一致性。...原创 2019-07-11 08:48:47 · 386 阅读 · 0 评论 -
JAVA设计模式(五) -- 装饰模式
装饰模式(Decorator)也叫包装器模式(Wrapper)。GOF 在《设计模式》一书中给出的定义为:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。...原创 2019-07-11 08:48:36 · 148 阅读 · 0 评论 -
JAVA设计模式(四) -- 策略模式
策略模式(Strategy)属于对象行为型设计模式,主要是定义一系列的算法,把这些算法一个个封装成拥有共同接口的单独的类,并且使它们之间可以互换。(一)策略模式的组成结构(二)策略模式的示例代码(三)考虑使用策略模式的一些情况原创 2019-07-09 17:26:24 · 189 阅读 · 0 评论 -
JAVA设计模式(三) -- 工厂模式
(一)简单工厂模式简单工厂模式又称静态工厂方法模式。它存在的目的很简单:定义一个用于创建对象的接口。组成结构:1) 工厂类角色(Creator):这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。2) 抽象产品角色(Product):它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。3) 具体产品角色(ConcreteProd...原创 2019-07-08 15:03:53 · 212 阅读 · 0 评论 -
JAVA设计模式(二) -- 单例模式
单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式中的“单例”通常用来代表那些本质上具有唯一性的系统组件(或者叫做资源)。比如文件系统、资源管理器等等。饿汉式与懒汉式密码复杂度的工具类:饿汉式单例模式,每次加载类都会生成一个实例。/** * 密码复杂度校验 */public class PasswordComplexityCheck { private P...原创 2019-07-02 17:52:40 · 181 阅读 · 0 评论 -
JAVA设计模式(一) -- JAVA中的设计原则与设计模式类型概括
设计模式类型概括六大设计原则原创 2019-07-02 17:52:22 · 238 阅读 · 0 评论