随笔分类 - 面向对象及设计模式
摘要:中介模式(Mediator)又称之为调停模式。mediator [ˈmiːdieɪtə(r)] n. 调停者;斡旋者;解决纷争的人(或机构); 本意就是解决纠纷的中间人它是面向对象六大原则中最少知道原则的一个典型应用。(关于面向对象六大原则,可看前文:https://www.cnblogs.com/
阅读全文
摘要:状态模式(State Pattern)的定义是这样的:类的行为是基于它的状态改变的。注意这里的状态不是狭义的指对象维护了一个“状态”字段,我们传入了不同的枚举值,对象整体的表现行为(对外方法)就改变了。而是指内部的(任意)字段如果发生了变化,那么它的状态就变了,那么它对外的表现形式就变了。状态模式是
阅读全文
摘要:模板方法模式(Template Method Pattern)也称之为模板模式(Template Pattern),是设计模式中最简单的模式之一。 先来看定义:定义一个操作中算法的骨架(模板),将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构即可重新定义算法某些特定的步骤。这个定义还是有
阅读全文
摘要:命令模式(Command Pattern),给大家的第一感觉,就是给程序发送命令,比如:启动、暂停,然后程序根据接收到的命令直接执行就行。这样的理解相对来说比较狭义,来看下命令模式官方的定义:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便
阅读全文
摘要:备忘录模式(Memento Pattern)官方的定义是这样的:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。它是面向对象的23种设计模式中的一种,属于行为模式的范围。直白点说就是:我们可以在不暴露更多字段的前提下,直接将某个对象
阅读全文
摘要:迭代器模式很多人都熟悉,但是什么是迭代器,为什么要用迭代器?这个很多人就很难做出具体回答了,只是知道如果有了迭代器,那么我们就能foreach遍历了,方便循环处理。这只是对迭代器的用途,进行了回答,foreach语法是java1.5时加入的语法糖,那么在这之前呢,之前是怎么做的?要知道并不是所有容器
阅读全文
摘要:什么是生产者消费者模式?简单来说就是有两个角色,一个角色主要负责生产数据,一个角色主要负责消费(使用)数据。那么生产者直接依赖消费者,然后直接调用是否可以?答案是可以的,但是有些场景无法及时解决,典型的就是生产者消费者的速度无法同步,导致整体的速度上不去的情况。执行速度永远取决于二者的最小速度(假设
阅读全文
摘要:责任链模式是面向对象的23种设计模式中的一种,属于行为模式范围。责任链模式(Chain of Responsibility),见名知意:就是每一个处理请求的处理器组合成一个链表,链表中的每个节点(执行器)都有机会处理发送的请求。 大致的结构是这个样子: 举一个简单的例子:某公司有一名新员工要入职,则
阅读全文
摘要:什么是动态代理呢?动态代理就是在java进程运行时,通过字节码技术,动态的生成某个类的代理类。在这个代理类中,我们可以做一些额外的操作,一方面仍然保持原有的方法的能力,另外一方面还增强了这些能力。听着是不是AOP有点像,没错,动态代理就是AOP的技术基石。在这之前我曾经写过两篇相关的文章:https
阅读全文
摘要:AOP (Aspect Oriented Programming)一般译为面向切面编程 Aspect [ˈæspekt] n.方面;层面;(动词的)体那么AOP 面相切面编程具体是指什么,它和之前的OOP 面相对象编程又有什么区别和联系。先说OOP,面相对象编程简单来说,万物皆可视为对象,我们要做的
阅读全文
摘要:什么是统一建模语言,来看看百科中的介绍统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。UML是面向对象设计的建模工具,独立于任何具体程序设计语言。简单来说UML就是脱离于具体
阅读全文
摘要:什么是动态代理呢?就是在java的运行过程中,动态的生成的代理类。(为了更熟悉的了解动态代理,你必须先熟悉代理模式,可点击设计模式之代理模式 阅读)我们知道java属于解释型语言,是在运行过程中,寻找字节码文件从而实现类加载的。但是字节码文件并不需要一定是硬盘中的class文件,也可以是来自网络、数
阅读全文
摘要:代理模式英文名叫Proxy Pattern 看下Proxy的含义 [ˈprɑ:ksi] n.代表权;代理人,代替物;委托书; 主要表达的就是代表、代替、委托的意思。 我对这个模式的理解是这样的: 一个服务或者是一个功能,一个对象。由于某种自身或者外界的原因,不能直接暴露出来,而是需要另外一个对象做一
阅读全文
摘要:享元模式是一种常用的设计模式。尤其是在拥有大数据量的传统后台服务中尤为突出。我们往往在不知不觉中就使用了这个设计模式。先来看看享元模式的定义:Flyweight Pattern Flyweight译为: n. 次最轻量级的拳击选手。 拳击比赛的重量级、轻量级是通过选手的体重来分界的。享元模式就是通过
阅读全文
摘要:在jdk的源码中,存在这样的一些接口,他们不包含任何的(抽象)方法,但是却广泛的存在。 这种接口我们称之为Mark Interface,也就是标记接口。 这些接口呢,我们不用来实现任何的方法,他们的作用就是当某个类实现这个接口的时候,我们就认为这个类拥有了这个接口标记的某种功能了。 下面通过三个例子
阅读全文
摘要:单例模式是软件开发中非常普遍的一种模式。它的主要作用是确保系统中,始终只存在一个类的实例对象。 这样做的好处有两点: 1、对于需要频繁使用的对象,在每次使用时,如果都需要重新创建,并且这些对象的内容都是一样的。则不但提高了jvm的性能开销(堆中开辟新地址,同时降低GC效率等),同时还会降低代码的运行
阅读全文
摘要:现在编程的主流语言基本上都是面向对象的。如C#,C++,JAVA。我们在使用时,已经构造了一个个的类。但是往往由于我们在类内部或外部的设计上存在种种问题,导致尽管是面向对象的语言,却是面向过程的逻辑,甚至维护起来异常困难。每次增加或修改功能都要改动很多的代码,如履薄冰。而面向对象的六大原则主要的目的
阅读全文
摘要:其实贫血设计模式和 充血设计模式在称呼上 有点炒作之嫌 这两个概念其实在很早以前,大家开始接受OO思想的时候 就已经开始争论的一个话题 简而言之 : 贫血模式 就是 一个object 中 内部的定义 只有字段和属性,以及少量关于这些字段 增删改查的方法,没有具体的业务逻辑,有点struct 的感觉。
阅读全文