设计模式
LuckyZhouStar
这个作者很懒,什么都没留下…
展开
-
设计模式——分发器模式
背景在spring中存在dispatching模式,现在就以这个为前提,设计一下大概的设计模式。实现Event:事件的基类Handler:事件处理的基类EventDispatcher:分发器的处理逻辑,内部维护了事件与处理器的映射关系,通过dispatch方法来进行分发事件...原创 2020-01-13 20:23:21 · 4345 阅读 · 1 评论 -
设计模式——数据传输模式
背景有不同类型的消息不同类型的消息需要被不同的member进行消费实现DataType:数据的类型,包含了一个数据传输的引用,dataBusAbstractDataType:抽象的数据的类型,用来进行设置数据传输的小火车StoppingData:具体的消息类型,停止的消息StartingData:具体的消息类型,开始的消息Member:消费者的接口,用来接收DataType...原创 2020-01-13 19:54:28 · 859 阅读 · 0 评论 -
设计模式——数据组合模式
背景一封信,有句子、单词、字母进行组成。其中字母汇总成单词,单词汇总成句子。针对该场景,如何进行设计实现方式LetterComposite:底层的数据容器基类,通过一个list的形式包含了整个的数据信息。Word、Sentence、Letter实现了LetterComposite类,进行数据的拼装Letter:该类中通过一个char的形式保存了一个单子中的某个字母。Word...原创 2020-01-13 19:18:34 · 504 阅读 · 0 评论 -
设计模式——职责链模式
背景有时候,在业务场景中,会遇到职责链的状况。一个链路可以被很多个执行者来进行执行。但是不需要被那个给执行。这个就需要借助职责链来进行实现。实现Request:是请求的报文传递类RequestHandler:是处理请求的抽象类,其中有指向了下一个处理的引用next,handleRequest中的处理逻辑直接由next来进行处理OrcSoldier:具体的执行者,继承了Reque...原创 2020-01-13 19:00:31 · 387 阅读 · 0 评论 -
设计模式——回调模式
背景有时候在做业务的时候,需要业务成功后,会进行回调函数操作。针对该场景的需求,如何来进行设计呢实现Task:抽象类,两个方法,其中一个给client端使用,进行执行业务操作方法,方法是需要回调的函数。execute()是抽象方法,用来子类进行实现SimpleTask:具体的业务逻辑执行的实现方式Callback:回调函数...原创 2020-01-13 18:54:10 · 471 阅读 · 0 评论 -
设计模式——访问者模式
背景目前只有两个物体,但是有不同的访问者每个访问者,对这两个物体的了解、认知和访问模式都不一样实现上述类图中,把访问者和物体都单独拆开。每个访问者都有自己的访问方法。当访问方法相同的时候,可以通过组合的形式构造成一个新的访问者如果要新增加访问者的话,直接添加新的类即可有一个不好的地方,如果要新增加组件的话,就需要在每一个访问者中增加一个新的访问方法,违反了"开闭原则"...原创 2020-01-13 16:42:58 · 395 阅读 · 0 评论 -
设计模式——抽象工厂模式
背景有一个生产王国的工厂,可以生产城堡、国王、军队。国王也有不同的分类军队也有不同的种类城堡也有不同的种类实现方式一KingdomFactory:国王加工的工厂接口ElfKingdomFactory:具体加工国王王国的工厂类,可以生产出来一些列的王国信息Castle:城堡的基类ElfCastle:具体的城堡实现类,实现了Castle其他的类实现细节与上述的功能一致方...原创 2020-01-13 16:11:30 · 295 阅读 · 0 评论 -
设计模式——汽车部件模型
场景描述1.有汽车、汽车部件的属性,他们都有一些公共的属性,但是属性的值不一样。针对该部分的场景,如何来设计?2.比如公有的属性有价格、类型、汽车的品牌等答案Document:底层公共数据的基类,提供最基本的获取、放置属性的配置信息AbstractDocument:抽象类,实现了基类,提供属性容器集合,属性配置操作的就是该类中的属性容器集合HasPrice:针对价格提供的属性配置类...原创 2020-01-13 15:44:07 · 617 阅读 · 0 评论 -
职责链模式
什么是职责链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之前的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 职责链模式的重心是在“链”上,由一条链去处理相似的请求在链中决定谁来处理这个请求,并返回相应的结果。通用类图 Handler:抽象处理者。一是定义一个请求的处理方法ha原创 2014-05-30 16:28:41 · 2549 阅读 · 20 评论 -
状态模式
定义当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式的核心是封装,状态的变更引起了行为的变更,从外部看起来就好像这个对象对应的类发生了改变一样。通用类图如下: 1.State——抽象状态角色接口或者抽象类,负责对象状态定义,并且封装角色以实现状态切换2.ConcreteState——具体状态角色原创 2014-05-30 15:29:11 · 1756 阅读 · 15 评论 -
单例模式
单例模式是一个比较简单的模式,其定义如下:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 通用类图通用代码Public Class Singleton Private sing = New Singleton '限制产生多个对象 Private Singleton() '通过该方法获得实例对象原创 2014-05-24 21:59:06 · 1429 阅读 · 15 评论 -
建造者模式
上一篇博客谈到了自行车,这篇来进一步的深入的探讨一下。 话说变化是永恒的,上一篇博客在模板方法模式的带领下,终于生产出来了一辆自行 车,但是客户又说了,我想要一辆自己随心所欲的自行车(就是一种自行车多种实现方 式),比如说先响铃、启动、停止或者先启动、停止、响铃,亦或停止、启动、响铃反正 都由客户自己控制,想什么顺序就什么顺序。 好吧,既然有需求就得重新来改原创 2014-04-02 17:34:12 · 1642 阅读 · 23 评论 -
模板方法模式
定义: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。原创 2014-03-29 11:04:37 · 1385 阅读 · 18 评论 -
装饰模式
看到上次写到了策略模式,最近又浏览了各位大神的博客,发现自己身边真的是卧虎 藏龙啊,各个都写的那叫一绝,感到很欣慰,可以从他们身上借鉴一下知识。在这期间 也学习了几个原则,先简单的总结一下这几个原则的用法。 单一职责原则:充分发挥GTD时间管理的思想,尽量使一个类的单一化。 开放—封闭原则:扩展改进需求,不可修改源代码。、 依赖倒转原则:依赖原创 2014-03-14 19:41:28 · 2070 阅读 · 71 评论 -
中介者模式
我爱上了我的同事阿志 可是我没有告诉他 我告诉了我另一个同事阿豪 阿豪答应我不告诉别人 可是我的同事阿德告诉我阿豪偷偷地告诉了另一个同事阿林 阿林又和阿志以前的女朋友阿兰很熟 我怕阿林会告诉阿兰 然后阿兰回去告诉阿志 这样我就会很尴尬 幸好现在阿兰正在和阿德谈恋爱 所以我就去找阿德帮我解决这个问题 阿德跟我说阿兰和他已经分手了 他现在跟阿林好上了让我去找阿林 可是阿林跟我说阿豪其实根本没有跟他原创 2014-04-02 19:59:37 · 1624 阅读 · 23 评论 -
提高班之策略模式
最近在看设计模式,刚从工厂模式中学了点技术,这不又要学点策略。 “初生牛犊不怕虎”,刚学习了点技术,就不知天高地厚了, 乍一看策略,这不也没什么嘛!跟我从工厂里面学习到的技术也 差不多嘛,其实不然。 敲了几遍代码,一直在想怎么用一种更加简单易懂的方式来形 容这种模式呢?只有这样才能加深对这种模式的理解。下面就拿 提高班“开刀”吧!原创 2014-03-09 20:36:22 · 2306 阅读 · 37 评论 -
“小米公司”的简单工厂模式
大家众所周知的小米公司在去年火了一把,从数字来看小米公司去年销售额跨过300亿元大关同比增长150% 2014年公司提出将供货4000万部手机。 在看小米公司的组织结构的时候,才发现“雷军”当年也可能学习过设计模式哈。为什这么说呢? 因为小米的组织结构总体上来说就只有两层,一个负责研发,一个负责销售。可怜的孩子啊!甚至连自己的工厂都没有。都是靠富士康大哥帮忙加工的。话又说回来,为何说雷原创 2014-03-09 18:56:41 · 4949 阅读 · 29 评论 -
简单工厂模式VS工厂模式
小插曲 最近见XX同学也在学习设计模式,就问了她是如何学习的。 XX同学说:我先看了一遍课本然后,从大致意思上找他们之间的联系,通过 对比来进行学习。比如:我最近在学习简单工厂、工厂模式和抽象工厂。 听了之后,顿时觉得羞愧难当。一直在强调全局观,一直在强调对比学习,原创 2014-03-16 17:27:04 · 1493 阅读 · 24 评论 -
代理模式
在写这篇代理模式之前,小编还特意的留意了以前写的C#中的委托。下面先来回顾一下C#中的委托。 委托上场public static int AddOpen(int a,int b) { return a + b; } public static int SubOpen(int a,int b)原创 2014-03-16 16:05:58 · 1578 阅读 · 22 评论