
设计模式
Spwperlukami
Never too late to turn , never too old to turn.
展开
-
设计模式(四)--装饰模式
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。主要解决:一般的,我们为了扩展一个类经常使用继承方...原创 2018-05-08 20:14:39 · 322 阅读 · 0 评论 -
设计模式(七)--模板方法、建造者模式
原型模式(复制简历与手写简历)属于创建型模式(注重对象创建)。模板方法(考试答题、招聘流程)属于行为模式(注重流程)。当我们要完成在某一细节层次一致的一个过程或一系列步骤(如招聘流程,开会流程--但具体招聘的公司时间地点对象都不尽相同),但其个别步骤在更详细的层次上实现可能不同时,通常考虑模板方法。优点:在父类中形式化地定义一个算法,而由其子类实现细节的处理,在子类实现详细的处理算法时并不会改变算...原创 2018-05-12 15:37:31 · 578 阅读 · 0 评论 -
设计模式(十)-状态模式、Qt状态机
书中关于状态模式引入的例子是:小菜一天的工作状态版本一:很简单一个时间变量,一个判断事件的函数。(最简单粗暴的,如果你的代码不超过500行,还是可以使用这种方式的)版本二:写了一个类,包含时间的成员变量。然后一个判断时间的成员函数(好吧,简单粗暴的外形被影藏起来了)版本三:各个子状态类,都继承一个状态抽象类,有一个公共状态改变接口(根据业务状态逻辑,设置上下文的当前状态)。这个接口,在子类实体中实...原创 2018-05-18 13:23:24 · 1286 阅读 · 0 评论 -
设计模式(六)-原型模式
书中引出的例子是,关于简历的复制问题。这里使用原型模式的关键是,克隆一个对象,与构造一个对象的不同。取决于克隆和构造的复杂度。克隆,需要处理深复制、与浅复制的问题。克隆的时候,与备忘录,状态模式有一些相似之处。使用哪一种取决需求。书中复制简历与手写简历的对比,可以准确的表达这种模式思想。用户在初始化对象时,使用同一套初始化变量,这种模式可以很好的避免用户在构造函数里面,初始化需要的用到的初始化变量...原创 2018-05-11 16:32:01 · 252 阅读 · 0 评论 -
设计模式(三)--策略模式
策略模式的结构图:引用:模版方法模式,对照类图可以看到,策略模式与模版方法模式的区别仅仅是多了一个单独的封装类Context,它与模版方法模式的区别在于:在模版方法模式中,调用算法的主体在抽象的父类中,而在策略模式中,调用算法的主体则是封装到了封装类Context中,抽象策略Strategy一般是一个接口,目的只是为了定义规范,里面一般不包含逻辑。其实,这只是通用实现,而在实际编程中,因为各个具体...原创 2018-04-27 09:28:55 · 458 阅读 · 0 评论 -
设计模式(九)-观察者模式、C#委托、事件
书中引出的例子为,当Boss回来,前台通知员工好好工作的场景。1、观察模式将通知广播给每一个客户端,客户端想知道目标的变化a、从目标拉取 b、通知的时候将变化传递给客户端。拉取的方法,客户端自由度较高,客户端可以根据需求拉取。观察者通知内容丰富,客户端需要不要更新拉取变化。耦合度高,违背迪米特法则,推送的方法,效率低,客户端需要判断通知类型,耦合度一样高。如果收到通知,两者之间需要来回事务往来,就...原创 2018-05-17 16:53:46 · 498 阅读 · 0 评论 -
设计模式(二)--简单工厂、工厂方法、抽象工厂
引用:愤怒的韭菜,个人觉得他总结的很精辟,易于理解。同时觉得博文格式也很喜欢。这三种模式表现的是在不同程度的抽象,选在使用哪一种,取决工程性质。定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。类图:三种工厂方法的演变:简单工厂:工厂方法:抽象工厂:适用场景: 不管是简单工厂模式,工厂方法模式还是抽象工厂模式,他们具有类似的特性,所以他...原创 2018-04-26 11:24:52 · 383 阅读 · 0 评论 -
设计模式(一)--设计原则
此系列只是对《大话设计模式》的巩固总结。在理解设计模式之前,需要理解几个:面向对象的设计原则单一职责:一个类只专注于做一件事。里氏替换:基类存在的地方,子类可以将其替换。依赖倒置:实现尽量依赖抽象,不依赖具体实现。接口隔离:为使用者提供尽可能小的的单独接口,而不是大而全。迪米特法则: 一个实体尽可能少的与其他实体发生相互作用。开闭原则:面向扩展开放、面向修改关闭。组合/聚合:尽量使用组合聚合达到复...原创 2018-04-25 15:30:51 · 300 阅读 · 0 评论 -
设计模式(五)--代理模式
代理模式在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。介绍意图:为其他对象提供一种代理以控制对这个对象的访问。主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者...原创 2018-05-09 11:50:50 · 259 阅读 · 0 评论 -
设计模式(八)-外观模式
外观模式外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。一般在做模块设计时,都会有接口设计。但是由于:1、子模块在经过长期的演化,功能复杂。调用环境配置麻烦,使用不便,需要将...原创 2018-05-16 15:37:52 · 283 阅读 · 0 评论