随笔分类 -  设计模式

摘要:1.memcached 2.redis 3.mongodb 4.消息队列的运用 阅读全文
posted @ 2016-02-24 11:16 haiziguo 阅读(171) 评论(0) 推荐(0) 编辑
摘要:1.工厂模式 2.模板方法 3.单例模式 4.设计模式中的原则 阅读全文
posted @ 2016-02-24 11:12 haiziguo 阅读(207) 评论(0) 推荐(0) 编辑
摘要:【转载】http://www.cnblogs.com/chy2055/p/5181352.html 学习是技术人员成长的基础,本次分享20本技术方面的书籍,这些书不是每一本都是经典,但是每一本都有其特点。以下20本大部分本人都看过,因此推荐给大家。(本次推荐的20本只是一个参考,比如像Head Fi 阅读全文
posted @ 2016-02-18 16:34 haiziguo 阅读(579) 评论(2) 推荐(0) 编辑
摘要:把迭代器模式和组合模式放在同一篇的原因是其联系比较紧密。一、迭代器模式1.1迭代器模式定义迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而不是暴露其内部的表示。这个模式提供了一种方法,可以顺序访问一个聚合对象中的元素,而不用知道内部怎么表示的。为了更好的理解迭代器模式,我们举个例子。1.2迭代器例子下面使用head first设计模式中的例子,使用迭代器模式来演示早餐和晚餐菜单的显示。由于早餐和晚餐其数据结构不同,由于早餐店和晚餐店需要合并,所以需要一个统一的菜单:即菜单项结构相同。下面先介绍一下菜单项的结构。public class MenuItem { pri... 阅读全文
posted @ 2013-11-17 13:11 haiziguo 阅读(7855) 评论(0) 推荐(1) 编辑
摘要:一、模板方法模式定义模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。从定义中,应该可以看出一部分,为了更好理解,下面就直接上例子:二、模板方法例子在敲代码时,累了喝杯咖啡或者喝杯茶,会精神倍增。其实无论咖啡还是茶在冲的时间都是有讲究的。这个在本文不是重点。下面分别描述一下冲泡咖啡和冲泡茶的过程:两种茶其分别的做法如下代码: 1 public class Coffee 2 { 3 public void PrepareRecipe() 4 { 5 //烧水 6... 阅读全文
posted @ 2013-11-03 00:25 haiziguo 阅读(6062) 评论(1) 推荐(3) 编辑
摘要:为什么要把适配器模式和外观模式放在同一篇文章中,主要是其相对前面的几个模式来讲会简单些并且具有相似之处。下面就分别通过例子来看理解一下两种模式,然后再进行对其进行比较。一、适配器模式1.1适配器模式的定义适配器模式定义:将一个类的接口,转化成客户期望的另一个接口,适配器让原本接口不兼容的类可以合作无间。感觉是从定义就可以看出来怎么实现的设计模式。简单的来说就是把不符合要求的类,通过实现期望的接口来来达到以假乱真的效果。好了,废话不多说,还是通过例子来说明。1.2适配器的例子最常见的例子是三孔插座和两孔插座,如果墙上有一个三孔插座,但是我们的充电器又只能使用两孔的插座,那么我们通常是接一条带有两 阅读全文
posted @ 2013-11-01 18:34 haiziguo 阅读(3977) 评论(6) 推荐(3) 编辑
摘要:一、命令模式定义命令大家都不会陌生,那么在开始命令模式之前,可以想象一下生活中的命令模式的特点:如老板命令你完成一个OA项目是一个命令,接着看看其特点:1、在上面的命令中,命令的执行者肯定是聪明的你了。具体的执行方法,可能是通过vs实现,或者是通过eclipse实现,由此看来:命令要有个命令的执行者,还要有个命令的执行方法。2、命令的发出者很明显是老板,老板还有个发出方法,可能是通过电话给你说,也可能给你邮件给你说,也可能是通过开会给你说。所以命令的发出者要有一个命令,还要有个发出的方法。3、最后看看命令,命令有个名字,命令的肯定要执行。而且命令是在boss给你发出通知后执行的。接下来看看命令 阅读全文
posted @ 2013-10-29 23:27 haiziguo 阅读(28274) 评论(3) 推荐(2) 编辑
摘要:所谓工厂,肯定是和生产有关。工厂模式主要包括工厂方法模式和抽象工厂模式,有些人把简单工厂也作为一种模式,在本文我分别讨论简单工厂模式,工厂方法模式,抽象工厂模式。这些模式中同样也和生产有关。接下来,我们来看看各种工厂的特点。简单工厂模式上面说了只是有些人把简单工厂看做是设计模式,其实是一种编程习惯,无论是否是设计模式,本文将先看看其用法,然后简单给出其类图,最后说出其特点。本节将面对多种比萨,先看看当顾客需要一个比萨时的过程:1.根据类型,制作一个比萨形状。2.然后进行烘烤3.切4.打包如果不熟悉的话,完全可以把其想想成面包的做法。当顾客根据自己的需求要一个比萨时,用代码模拟这个过程如下:pu 阅读全文
posted @ 2013-10-17 21:22 haiziguo 阅读(2937) 评论(1) 推荐(1) 编辑
摘要:装饰者模式定义装饰者模式动态的将责任附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。从定义来看,除了提到比继承更有弹性,其他的还是非常模糊,下面就先给出其UML类图。从UML类图可以看到装饰者基类(Decorator)主要使用了一个其基类的组合,另外装饰者分别含有自己的新特性,如ConcreteDecoratorA,有自己特有的字段,ConcreteDecoratorB有自己特有的方法。该模式设计的巧妙的地方就在于以上的特点。为什么说巧妙呢?因为装饰者都含有一个Component的引用,就好比你是老板要找c#开发的,遇到了一个不仅会c#的,还会java的你一样,这样的好处是不 阅读全文
posted @ 2013-10-09 23:18 haiziguo 阅读(1848) 评论(2) 推荐(2) 编辑
摘要:1.1观察者模式定义在给出观察者模式的定义之前,我们先来看个报纸和杂志的订阅是怎么回事:1.报社的业务就是出版报纸2.向某家报社订阅报纸,只有新报纸出版,报社才会送给你,只要你是用户,他就会一直向你发送。3.当你不向看报纸了,取消订阅,他们就不会发送报纸。4.只要报社还在运营,就会有人订阅报纸或取消报纸订阅其实这个过程就和我们的观察者模式的过程相似。所以我们可以简单的将观察者模式定义为:出版社+订阅者=观察者模式这个毕竟是简单的,下面我们给出正式的定义:观察者模式定义了对象之间的一对多依赖,当一个被依赖者改变状态时,他所有的依赖者都会收到通知并自动更新。通过出版社和正式定义应该很容易理解观察者 阅读全文
posted @ 2013-10-06 15:01 haiziguo 阅读(1840) 评论(0) 推荐(2) 编辑
摘要:一、策略模式的定义策略模式定义了算法族,分别封装起来,让它们之间可以互换替换,此模式让算法的变化独立使用算法的客户。二、使用策略模式的一个例子2.1引出问题某公司做了一套模拟鸭子的游戏:该游戏会出现各种鸭子,他们具有相似点(都会叫,会游泳,会表达自己的特征)和异同点(每种展示自己的特征是不同的方法),很容易想到使用OO技术,定义个鸭子超类,让其他的鸭子类来继承鸭子超类。由于异同点都会展示自己的特征,只是展示特征方式不同,所以在超类中特征的方法是抽象或者使用一个接口(在此就使用接口,因为每一个类都会有展示方法)。下面给出其类图。可当某一天发现了问题,问题1:如果出现了一个DuckC,展示方式和D 阅读全文
posted @ 2013-09-28 21:53 haiziguo 阅读(2020) 评论(3) 推荐(2) 编辑
摘要:一、两个设计原则:原则一:找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起。鸭子模型中展现是必须的,而且每个展现都不一样,所以可以在基类中定义一个抽象类。以便子类可以更好的重写。在鸭子模型中,飞和叫的行为是经常要发生改变的,而且是鸭子的行为,我们可以让其抽象为接口。从而为每一个类传递不同的飞和叫的行为。原则二:面向接口编程,不要面向实现编程面向接口编程的含义是:让接口作为鸭子的变量,具体的实现是一个继承接口的类。这样每个继承接口的类就可以达到了复用的效果。二、动态改变鸭子的行为时,可以使用Setter,通过C#的多态来实现。public class Duck .. 阅读全文
posted @ 2013-09-15 11:27 haiziguo 阅读(372) 评论(0) 推荐(0) 编辑