合集-设计模式
摘要:1 什么是设计模式设计模式是对在软件设计过程中重复出现的问题提出了一种比较好的解决方案。正如一位专家所说:设计模式是对程序设计人员经常遇到的设计问题的可再现的解决方案(The Smalltalk Companion)。GOF设计模式通常被认为是其他设计模式的基础,随着业务复杂度的增大,会不断涌现新的设计模式,而这些新的设计模式一般会以GOF模式理论为参照。2 为什么要学习设计模式从个人职业规划来考虑。一位软件开发工程师随着编码量的增加,开发经验的增加,软件理论理解的加深,会不由自主地想一些方法或者捷径,来提高自己的生产率,而不是面对重复的问题做相同的工作,当你有这种想法的时候,就需要开始学习设
阅读全文
摘要:计算机中的设计模式,在生活中我是这样理解的:做其它事情也是这样的,单一责任,自己负责自己的;开放与封闭,对你以前做的不要在原来的地方修改,应该在新的地方去扩展;面对问题时的规则性,在事之前先制订原则,按着原则去办事,让你的效率更高,更清晰;里氏代换原则,在一个产品中,比如橡皮与修正液,前者是后者的鼻祖,如果后者想要代替前都,必须实现前者的所有功能,并要有自己的特色。
阅读全文
摘要:返回目录在简单工厂的讲解中,出现了很多问题,我们对象统一行为抽象出一个接口(或者抽象类)之后,再根据你传入的类型进行创建实例,这只适合于你有固定行为的场合,当你要实现接口的类型处于不定数时,则不适合使用简单工厂模式,而应该用工厂方法了。适用场合:子类有统一的操作行为子类的数量不固定,随时可能有新的功...
阅读全文
摘要:返回目录 简单工厂模式Simple Factory根据提供给它的数据,返回一个类的实例。通常它返回的类都有一个公共的父类(或者接口对象)。简单工厂的作用是实例化对象,而不需要客户了解这个对象属于哪个具体的子类。简单工厂实例化的类具有相同的接口或者基类,在子类比较固定并不需要扩展时,可以使用简单工...
阅读全文
摘要:返回目录单件模式(Singleton)要求一个类有且仅有一个实例,并且提供了一个全局的访问点。从概念上来研究一下它的实现,不考虑线程安全 1 public sealed class Singlton 2 { 3 static Singlton instance = null; 4 p...
阅读全文
摘要:委托和接口都允许类设计器分离类型声明和实现。 任何类或结构都能继承和实现给定的接口。 可以为任何类上的方法创建委托,前提是该方法符合委托的方法签名。 接口引用或委托可由不了解实现该接口或委托方法的类的对象使用。 既然存在这些相似性,那么类设计器何时应使用委托,何时又该使用接口呢?在以下情况下,请使用委托:当使用事件设计模式时。当封装静态方法可取时。当调用方不需要访问实现该方法的对象中的其他属性、方法或接口时。需要方便的组合。当类可能需要该方法的多个实现时。在以下情况下,请使用接口:当存在一组可能被调用的相关方法时。当类只需要方法的单个实现时。当使用接口的类想要将该接口强制转换为其他接口或类类型
阅读全文
摘要:返回目录策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。而对于客户端(UI)来说,可以通过IOC再配合工厂模块,实现动态策略的切换,策略模块通常于一个抽象策略对象(interface or abstract class),多个具体策略对象(implement class...
阅读全文
摘要:返回目录 装饰器模式,也叫又叫装饰者模式,顾名思义,将一个对象进行包裹,包装,让它变成一个比较满意的对象,这种模式在我们平时项目开发中,经常会用到,事实上,它是处理问题的一种技巧,也很好的扩展了程序,让程序代码不那么死板! 何时能用到它? 1. 需要扩展一个类的功能,或给一个类添加附加职责。 2.
阅读全文
摘要:返回目录观察者模式,也叫发布/订阅模式(publish/subscribe),监视器模式等。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。。何时能用到它?此种模式通常被用来实现事件处理系统,例如,当一个数据仓储...
阅读全文
摘要:返回目录之前和大家一起谈了工厂模式和单例模式,今天来看一下另一种非常常用的模式,它就是适配器模式,第一次看到这个模式是通过“张逸”老师的“设计之道”这篇文章,在这里表adapter讲的很透彻,今天把张老师的文章拿过来,分享给大家!何时能用到它?对于一个软件生产商A来说,在过去的20年里,它们主要生产...
阅读全文
摘要:下面是按着我所接触的架构模式,开始一个一个的说一下 第一 标准架构 三层结构 、 第二 MVC架构 在表现层实现的一种设计模式,在这里C(控制器)是核心,它将M(模型)序列化和反序列化给View进行输出和输入(Response and Request) 第三 DDD领域驱动设计模式 它与传统的分层架
阅读全文
摘要:(本文不说IOC,不说设计模式,只说基础的internal关键字的实际意义)题目非常有意思,“隐藏应该隐藏的对象”,事实上,我们在做开发时,会遇到一些问题,一个功能会涉及到一些类,一些方法,而向外开放的接口往往只有一个,即一个规范,多个实现,而这些实现,是通过一个类型来区别的,如:一个加密码方法EncryptString,它会有一个类型去标示你是用md5,des,还是其它方式去做加密,而对于实现的细节,调用者不需要关心,当然这还是面向对象的原则问题。它的类型可能是个枚举: /// <summary> /// 加密类型 /// </summary> ...
阅读全文
摘要:开发语言(Development)Java.Net云计算移动HTML JavaScriptPHP架构 & 设计(Architecture & Design)建模(Modeling)性能和可伸缩性(Scalability/Performance)领域驱动设计(DDD)面向切面 (AOP)设计模式(Patterns)安全(Security)云计算(Cloud)面向服务(SOA)过程 & 实践(Process & Practices)敏捷(Agile)领导能力(Leadership)团队协作(Collaboration)敏捷技术(Agile Techniques)方法
阅读全文
摘要:简介 数据传输对象(DTO),是一种设计模式之间传输数据的软件应用系统。数据传输目标往往是结合使用的数据访问对象从数据库中检索数据。 数据传输对象与数据交互对象或数据访问对象之间的差异是一个以不具有任何行为除了存储和检索的数据(访问和存取器)。 在传统的系统(企业JavaBeans)体系结构,数据传输目标服务的双重目的:第一,他们围 绕这个问题,pre-ejb实体不是序列化的;其次,他们含蓄地定义一个组装阶段,所有要使用的数据的提取和整理到数据传输目标之前返回控制[表现层]; 第三个原因是使用数据传输目标可能是某些应用层不应该能够访问底层的数据访问对象,从而改变数据。产生 Data...
阅读全文
摘要:责任链,我感觉对就根据需求动态的组织一些工作流程,比如完成一件事有5个步骤,而第1步,第2步,第3步它们的顺序可以在某些时候是不固定的,而这就符合责任链的范畴,我们根据需求去设计我们的这些链条,去自己指定它们的执行顺序,下面看我的一个例子。 出现的对象 抽象责任 具体责任 抽象链条 具体链条 对象的
阅读全文
摘要:装饰器,顾名思义,就是把一个对象的功能进行扩展,添加新的装饰,让它具有新的特性和功能,在实现生活中,有很多装饰器实现的例子,比如人类可以跑,但有一个超人它不仅可以跑,而且还可以飞,这时在不改变原对象基础上,需要为超人添加飞的动作,就可以使用装饰模式。 抽象组件 具体组件 抽象装饰器 超人的装饰器 让
阅读全文
摘要:设计模式可以使用我们在软件开发过程中更加灵活,软件的扩展更容易,软件的耦合度更低,设计模式不是在开发中刻意去用的,而是到了什么时候用什么模式的,不能强迫的使用它,应该是自然而然的想到它。 单例模式 在23种设计模式中,单例最为简单和纯粹,也是最容易理解的,即它在软件生命周期里,只有一个实例,就是说你
阅读全文
摘要:"回到目录" 职责链模式 它是一种设计模块,主要将操作流程与具体操作解耦,让每个操作都可以设置自己的操作流程,这对于工作流应用是一个不错的选择! 下面是官方标准的定义:责任链模式是一种设计模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一
阅读全文
摘要:回到目录 这个标题够直接了吧,够坦诚了吧,也许你在项目里这三个东西都没有用到,但这三个东西在未来的两年里将成为最HOT的技术,它们不是什么框架,也不是什么设计模式,而是做为程序和环境快速部署而设计出来的,为的就是解决未来超级复杂的开发环境的部署工作,对于这三个东西,大叔最近也在研究与实践,并现时会总
阅读全文
摘要:返回目录 再说概念 这两个模式确实有点相似,都为了实现程序的解耦产生的,观察者一般又称发布/订阅模式,它一般是有一个主题对象,然后有多个订阅者去关注它,当它的状态发生变化时,会自动通知这些订阅者;而消费者模式类似一个缓存队列的概念,它也称为生产者/消费者模式,生产者只负责生产数据不去做处理(缓解高并
阅读全文
摘要:返回目录为何要设计多功能消息组件之前写过一篇装饰器模式的文章,感觉不够深入,这次的例子是实现项目中遇到的,所以把它拿出来,再写写,之前也写过消息组件的文章,主要采用了策略模式实现的,即每个项目可以通过配置进行一种消息的订制,如,你可以订制email,sms,rtx,qq等,但不能同时采用多种机制完成...
阅读全文
摘要:回到目录之前的讲过两篇关于日志组件的文章,分别是《第一回 日志记录组件之自主的Vlog》和《第三回 日志记录组件之log4net》,而今天主要说一下我自己开发的另一种日志组件Logger.Core,它也属于面试AOP(横切关注点)的一部分,这个组件对于一些想学习设计模式的同学来说,无疑是一个大餐!L...
阅读全文
摘要:返回目录模版模式,又被称为模版方法模式,它可以将工作流程进行封装,并且对外提供了个性化的控制,但主流程外界不能修改,也就是说,模版方法模式中,将工作的主体架构规定好,具体类可以根据自己的需要,各自去实现,这可能会让我们想到策略模式,两者有着本质的区别。何时能用到它?我们看一下策略模式的应用场景1、 ...
阅读全文
摘要:返回目录在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。意图【GOF95】在提出桥梁模式的时候指出,桥梁模式的用意是"将抽象化(A...
阅读全文
摘要:返回目录门面模式(Facade)属于结构型模式的一种,它符合面向对象的封装原则,但又不符合开闭原则,呵呵,今天我们主要说它的优点,不谈缺点.定义门面模式,是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使用子系统更容易使用。技巧我们在设计子类时,...
阅读全文
摘要:返回目录建造者模式是我的"设计模式"里创建型模式里的最后一篇,这种模式在实现中,很多架构都用到了,如MVC,MVP,MVVM,它们都是有建造者模式的精髓的,即,创建与表现分享,我们的MVC何尝不是,我们的MVVM又何尝不是呢,我们做软件的,换肤是常有的事,其实换肤的实现不就是建造者模式最好的体现吗,...
阅读全文
摘要:返回目录何时能用到它?组合模式又叫部分-整体模式,在树型结构中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。对于今天这个例子来说,它可以很清楚的说明组合模式的用意,首先是一个Graphics对象,它表示是一绘图功能(树根),...
阅读全文
摘要:返回目录原型模式是创建型模式的一种,其特点在于通过“复制”一个已经存在的实例来返回新的实例(clone),而不是新建(new)实例。被复制的实例就是我们所称的“原型”,这个原型是可定制的。原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效;或者创建值相等,...
阅读全文
摘要:回到占占推荐博客索引 设计模式(Design pattern)与其它知识不同,它没有华丽的外表,没有吸引人的工具去实现,它是一种心法,一种内功,如果你希望在软件开发领域有一种新的突破,一个质的飞越,那么,设计模式应该是你的必修之路!设计模式可以提高软件的扩展性,代码的健壮性和重复利用性,设计模式是实
阅读全文
摘要:[回到目录](https://www.cnblogs.com/lori/p/3896484.html) # 责任链模式 它是一种设计模块,主要将操作流程与具体操作解耦,让每个操作都可以设置自己的操作流程,这对于工作流应用是一个不错的选择! 下面是官方标准的定义:责任链模式是一种设计模式。在责任链模式
阅读全文
摘要:[回到目录](https://www.cnblogs.com/lori/p/3896484.html) # 概述 命令模式(Command Pattern)是一种行为型设计模式,它将请求封装成一个对象,从而允许我们根据不同的请求将客户端参数化,并且能够将请求排队或记录请求日志、支持撤销操作等。该模式
阅读全文
摘要:[回到目录](https://www.cnblogs.com/lori/p/3896484.html) # 概述 委派模式(Delegate Pattern)又叫作委托模式,是一种面向对象的设计模式,允许对象组合实现与继承相同的代码重用。它的基本作用就是负责任务的调用和分配,是一种特殊的静态代理模式
阅读全文
摘要:[回到目录](https://www.cnblogs.com/lori/p/3896484.html) # 说明 复合的责任链,类似于管道模式,只要符合条件,说会向下传递,不会终止 # 算法说明 * 按最高优先级去使用,符合就用,不符合就走下一个策略 * 具体链条,有点像pipeline管道模式 *
阅读全文
摘要:获取IP地址信息时,一般我们需要一个HttpServletRequest对象,然后从请求头里获取x-forwarded-for的值,而当我们使用dubbo+netty开发rest接口时,如果希望获取IP地址,HttpServletRequest是用不了的,你需要使用netty中的NettyReque
阅读全文
摘要:This Principle is the foundation for Design patterns in Software System. For acheiving flexibility and making code modular it is highly recommended th
阅读全文
摘要:策略模式的应用,我们以一个配置字典来说一下这个问题;首先这个字典用来管理若干个配置,每个配置项都有key和value,key是字符串,value是某种类型;我们通过一个ConfigServiceStrategy接口来规定配置的操作行为,通过ConfigServiceContext来表示一个配置上下文
阅读全文