设计模式
文章平均质量分 79
THEONE10211024
GitHub:https://github.com/THEONE10211024
展开
-
设计模式——观察者模式的双解耦实现
定义什么是观察者模式?观察者模式通俗的理解就是多个对象(观察者)“实时”观察某个对象(主题对象)。一旦这个被观察的对象状态发生了变化或者产生了某种事件,就会依次通知所有正在观察该对象的观察者,让他们能主动且及时应对状态(或事件)的发生。要点1)观察者要想得主题对象的通知,必须在主题对象那里登记——添加观察者。2)观察者不想继续得到主题对象的通知的时候,主题对象应该将其从自己的登原创 2013-10-26 11:13:32 · 1846 阅读 · 1 评论 -
execute around 模式
在写代码的时候,常常会遇到这样的情况:每次在执行一段代码的时候,都需要先执行一些代码;执行完之后,再执行另一些代码。比如在读写文件的时候,我们真正care的逻辑是"读写",至于文件流的初始化、打开、关闭、异常处理等都不是我们关心的。但是,每次在"读写"之前,我们需要执行打开操作,"读写"之后,需要执行关闭操作。这个时候就可以使用"execute around 模式"来提炼出"读写"前后的公共代码,原创 2017-09-01 16:24:39 · 725 阅读 · 0 评论 -
模板方法模式(Template Method Pattern)
模板方法模式是定义一个算法的骨架,将算法的实现延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。在这个例子中,算法骨架是StealingMethod,然后定义了两个算法的具体实现类:SubtleMethod和HitAndRunMethod。算法调用者为Halfling Thief,调用者只关心StealingMethod,而具体的算法实现由具体的场景来具体指定。类原创 2017-09-18 14:32:46 · 842 阅读 · 0 评论 -
转换器(Converter)模式
在日常编码中,我们会遇到这样一个场景:把一个类型的对象转换成另一个对象,而这两者之前的转换强调的是"值(Value)"的等价转换,两者之间并没有继承与被继承的关系,也并不是像浮点数转整数这种语法意义上的转换关系。如下面举的这个例子:"用户"这个对象定义了User和UserDto两种Bean class来表示,二者所代表的"值"都是一致的,只是一个是业务逻辑层面的,一个是数据访问层面的。二者之前常常原创 2017-09-08 16:28:20 · 2298 阅读 · 1 评论 -
Null Object 模式
有时候,我们可以定义一个"空对象"来代替null,这样可以更加优雅的处理对象为null的情况,避免空指针异常。例如定义二叉树结点的时候,可以用一个NullNode结点来定义空结点。那么一个叶子结点的左子树和右子树就都可以指向NullNode,从而避免了可能引起空指针异常的null。类图:代码:/** * * Interface for binary tree node. * */pub原创 2017-08-30 20:44:13 · 851 阅读 · 0 评论 -
值对象(Value Object)模式
针对一些数据对象,我们更强调的是这个对象的值而不是这个对象本身的时候,就可以使用值对象模式。意思就是两个对象判定相等的时候应该是两个对象的"值"相等,而不是它俩必须是同一个对象。在编写值对象模式的时候,应该注意以下几点(以java为例):1、必须重写equals()、hashCode(),且重写的原则是两个对象的"值"相等的化,equal()和hashCode()必然相等。2、值对象一般不可修改,原创 2017-08-30 14:36:25 · 6346 阅读 · 0 评论 -
对象池(Object Pool)模式
对象池模式适用于当对象的创建代价比较高又需要频繁创建的时候。对象池模式会创建一批对象缓存起来待用。当需要对象的时候就从缓存池中获取,不需要的时候就放回缓存池中。当缓存池中对象不够用的时候又会创建新的对象放到缓存池中。类图如下:代码如下:/** * * Oliphaunts are expensive to create * */public class Oliphaunt { p原创 2017-08-30 12:57:40 · 1206 阅读 · 0 评论 -
读者容错模式(Tolerant Reader Pattern)
读者容错模式是当从一个数据模型中读取数据的时候,无论这个数据模型如何变换,尽最大可能读取自己需要的数据,达到读取数据健壮性的要求。例如我们有一个数据模型类:RainbowFish,表示一种鱼。有一个读写数据的类:RainbowFishSerializer,来获取RainbowFish的name、age、lengthMeters、weightTons等数据。但是RainbowFish是第三方提供,可原创 2017-09-15 17:37:04 · 1324 阅读 · 0 评论 -
Flux Pattern
Flux是Facebook提出的一种新的架构模式。一个Flux架构一般分为4个部分:View:视图层(界面)Action:视图层发出的消息或事件,如点击按钮Dispatcher:派发器,用来接受Actions、执行回调函数Store:数据层,用来存放应用状态,一旦发生变动,就要通知Views更新界面执行流程 用户操作(访问)ViewView发出用户的Action给DispatcherDispatc原创 2017-09-13 19:32:23 · 1410 阅读 · 0 评论 -
设计模式<二>——装饰模式
番外:仅供个人学习装饰模式类图:ConcreteComponent即为装饰者,Decorator即为装饰器。特点:装饰者和装饰器都继至同一个父类,并且装饰器还由父类(装饰者或装饰器)组合而成。即装饰器类成员变量一定包含了装饰者或者装饰器本身。使用:ConcreteComponent c = new ConcreteComponent();//定义一个装饰者Concre原创 2015-05-26 08:46:40 · 1965 阅读 · 2 评论 -
设计模式<三>——外观模式
番外:仅供个人学习类图:Facade知道哪些子系统负责处理哪些请求,将客户(Client)的请求转移给不同的子系统处理。而暴露给客户(client)的请求操作都是一致的。原创 2015-05-26 08:57:46 · 970 阅读 · 0 评论 -
设计模式<一>——适配器模式
Adapter转化Adaptee以适配Target的需求!原创 2015-05-26 00:08:40 · 1247 阅读 · 0 评论 -
设计模式简介
最近在学习设计模式,工作用有用到,也在书中学习了不少,看了不止一次的书,同一个模式用了不止一次。但是还是怕忘记,俗话说的“好记性不如烂笔头”,因此,常记笔记总是没有坏处。因此,这一章节我主要是把我看到和学到的设计模式做一个提纲挈领的总结,类似于一个思维领导。便于快速浏览,复习和温故知新!每一篇篇幅不会太长,只是抓住该模式的点,以供回忆。本章节的所有文章都是为自己准备的,若方访客期望学习到什么,原创 2015-05-26 00:05:40 · 577 阅读 · 0 评论 -
设计模式<四>——代理模式
番外:仅供个人学习类图:客户想要操作RealSubject,但实际上是操作Proxy,然后让Proxy去代理客户操作RealSubject。继承统一接口的好处是使得代理类(Proxy)和被代理类(RealSubject)对外都暴露统一的接口。实际上,视情况而定,不一定非得继承至统一接口。与适配器模式的区别:适配器模式着重于数据的转化适配,而代理模式着重于操作的转移原创 2015-05-26 09:07:48 · 1357 阅读 · 0 评论 -
设计模式<五>——状态模式
类图状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类【DP】。主要解决的就是当控制一个状态的条件表达式过于复杂的时候,把状态转移到表示不同状态的一系列类当中。目的是把复杂而冗长的条件判断简化。好处便是将与特性状态相关的行为局部化,并且将不同状态的行为分割开来。原创 2015-06-02 09:01:41 · 1073 阅读 · 0 评论 -
如何打一把好锁
微软在windows 3.1以后,便引入了多线程模型,相对于单线程模型中只有一个线程主动放弃CPU(等待资源或执行完毕)的单一执行模式,多线程的出现在很大程度上提高了程序的运行效率和响应度。但是多线程的并发执行也带来了一个大问题:共享数据的不一致。因此,在多线程编程中,需要加锁来同步协调线程间的协作,保证数据执行的一致性。在windows中,常见的锁包括互斥量(mutex)、信号量(semapho原创 2013-10-24 18:03:28 · 1496 阅读 · 0 评论 -
设计模式——策略模式
策略模式(strategy):它定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法根据不用需求动态变化,而不会影响到使用算法的客户。原创 2013-10-25 18:15:15 · 827 阅读 · 0 评论 -
UML四中关系浅解析
聚合、依赖、关联和组合表示方法:聚合(一种弱的拥有关系):用空心菱形+实线+箭头,它所体现的思想是A对象可以包含B对象,但是B对象却不是A对象的一部分依赖:虚线+箭头关联:实心线+箭头组合(即合成,一种强的拥有关系,部分与整体的关系):实心菱形+实线+箭头原创 2013-10-25 17:52:41 · 1385 阅读 · 0 评论 -
职责链模式(Chain of Responsibility Pattern)
所有一切链式的、分步完成的、"传递性"的都可以想到用职责链模式。其实现方式的关键类似于链表的结构。职责链由一些职责结点组成,每个结点能够将任务传递给下一个结点。最后每个结点都遍历且执行了该结点规定执行的任务。举个例子:类图:关键是RequestHandler的实现。代码:/** * * RequestHandler * */public abstract class RequestHa原创 2017-09-19 14:49:23 · 593 阅读 · 0 评论