上一页 1 ··· 3 4 5 6 7

2013年10月9日

摘要: 在软件开发中,也会存在一些构造非常复杂的对象,这些对象拥有一系列的成员属性,这些成员属性有些是基本数据类型,有些是引用类型,总之就是一句话,这个对象的构建比较复杂。在这里我们就将复杂对象当做汽车,成员属性当做部件,对象的构建当做汽车的组合。对于用户而言我们总是希望我们在使用对象时足够简单,如果一个复杂的对象直接丢给用户,用户会是痛苦不堪的(给你一堆部件,你来组装成一辆汽车看看),除了这个构建的过程外,可能用户会忘记某些成员属性。所以我们就希望能够像使用汽车一样使用复杂的对象:直接告诉你我需要的对象名或者对象类型,你返回一个完成的对象实例给我。建造者返回给客户一个完整的的产品对象,而客户端无须关 阅读全文
posted @ 2013-10-09 14:17 豆沙包没有肉 阅读(171) 评论(0) 推荐(0) 编辑
摘要: Facade外观模式,是一种结构型模式,它主要解决的问题是:组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战。在这里我想举一个例子:比如,现在有一辆汽车,我们(客户程序)要启动它,那我们就要发动引擎(子系统1),使四个车轮(子系统2)转动。但是实际中我们并不需要用手推动车轮使其转动,我们踩下油门,此时汽车再根据一些其他的操作使车轮转动。油门就好比系统给我们留下的接口,不论汽车是以何种方式转动车轮,车轮变化成什么牌子的,我们要开走汽车所要做的还是踩下油门。GoF《设计模式》中说道:为子系统中的一组接口提供一个一致的界面,Faca 阅读全文
posted @ 2013-10-09 11:51 豆沙包没有肉 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式是通过把不变的行为搬移到超类,去除子类中的重复代码来体现它的优势的。也就提供了一个很好的代码复用平台。如果以后遇到这种情况:有一个过程需要执行,这个过程包括一系列步骤,整个过程从高层次看是一样的,但是每个步骤的具体细节不一样,这时我们就可以考虑这种模板方法模式了。即当不变的行为和可变的行为在类中混在一起的时候,不变的行为就会在子类中重复出现,这是通过模板方法模式把这些行为搬移到单一的地方实现(超类),而把不同的部分在子类实现,这就使子类摆脱了重 阅读全文
posted @ 2013-10-09 11:39 豆沙包没有肉 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 原型模式:用于创建几乎完全相同的对象实现方式:浅拷贝和深拷贝(通过序列化/反序列化),浅拷贝,生成值类型副本,指向引用类型;深拷贝,生成值类型和引用类型副本。 参考文章:http://blog.csdn.net/liu_yujie2011com/article/details/4051056... 阅读全文
posted @ 2013-10-09 11:31 豆沙包没有肉 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 在画类图的时候,理清类和类之间的关系是重点。类之间关系耦合度降序排列:泛化,实现,组合,聚合,一般关联,依赖。类的关系有泛化(Generalization)、实现(Realization)、依赖(Dependency)和关联(Association)。其中关联又分为一般关联关系和聚合关系(Aggregation),合成关系(Composition)。1.泛化(generalization):表示is-a的关系,是对象之间耦合度最大的一种关系,子类继承父类的所有细节。 直接使用语言中的继承表达。在类图中使用带三角箭头的实线表示,箭头从子类指向父类。2.实现(Realization):在类图中就是 阅读全文
posted @ 2013-10-09 10:50 豆沙包没有肉 阅读(446) 评论(0) 推荐(0) 编辑
摘要: Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。代码1://送礼物 interface GiveGift { void GiveDolls(); void GiveFlowers(); void GiveChocolate(); } //代理 cla... 阅读全文
posted @ 2013-10-09 10:43 豆沙包没有肉 阅读(180) 评论(0) 推荐(0) 编辑

2013年10月8日

摘要: Decorator装饰模式是一种结构型模式,它主要是解决:“过度地使用了继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀(多继承)。继承为类型引入的静态特质的意思是说以继承的方式使某一类型要获得功能是在编译时。所谓静态,是指在编译时;动态,是指在运行时。GoF《设计模式》中说道:动态的给一个对象添加一些额外的职责。就增加功能而言,Decorator模式比生成子类更为灵活。代码1:被装饰的对象public abstract class AbstractCellPhone . 阅读全文
posted @ 2013-10-08 17:12 豆沙包没有肉 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 策略模式跟简单工厂模式大致相同,不同的是策略模式中的上下文类会包含策略父类。代码1:策略抽象部分using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 策略模式{ /// /// 现金收取父类 /// abstract class BaseCash { //抽象方法:收取现金,参数为原价,返回为当前价 public abstract double acceptCash(double money); }... 阅读全文
posted @ 2013-10-08 15:57 豆沙包没有肉 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 简单工厂:抽象产品,工厂没有抽象出来。工厂方法:抽象产品,抽象工厂。抽象工厂:抽象多种产品,抽象工厂。代码1:工厂抽象部分using System;using System.Collections.Generic;using System.Text;using System.Reflection;using System.Configuration;namespace AbstractFactory{ /// /// 抽象工厂 /// public abstract class AbstractClothesFactory { //抽象方法:创建... 阅读全文
posted @ 2013-10-08 15:47 豆沙包没有肉 阅读(192) 评论(0) 推荐(0) 编辑
摘要: using System;using System.Collections.Generic;using System.Text;/* * 工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。首先完全实现‘开-闭 原则’,实现了可扩展。 * 其次更复杂的层次结构,可以应用于产品结果复杂的场合。 * 工厂方法模式的对简单工厂模式进行了抽象。 * 有一个抽象的Factory类(可以是抽象类和接口),这个类将不再负责具体的产品生产,而是只制定一些规范,具体的生产工作由其子类去完成。 * 在这个模式中,工厂类和产品类往往可以依次对应。 * 即一个抽象工厂对应一个抽象产品,一个具体工厂对应一个 阅读全文
posted @ 2013-10-08 15:39 豆沙包没有肉 阅读(185) 评论(0) 推荐(0) 编辑
摘要: using System;using System.Collections.Generic;using System.Text;/* *设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。 *简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。 *简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。 *简单工厂 */namespace 简单工厂_计算器{ /// /// 运算类 /// public class Oper... 阅读全文
posted @ 2013-10-08 15:35 豆沙包没有肉 阅读(187) 评论(0) 推荐(0) 编辑

2013年8月23日

摘要: 直接编辑项目文件(用记事本打开),添加一个section节点,如下 DataProducerExt.cs 阅读全文
posted @ 2013-08-23 10:15 豆沙包没有肉 阅读(481) 评论(0) 推荐(0) 编辑

2013年8月5日

摘要: 定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。类型:行为类模式类图: /// /// 模拟if else 判定条件 /// class Level { private int _level = 0; public Level(int level) { this._level = level; } /// /// 判定当前条件层级是否高于给定的条件 ... 阅读全文
posted @ 2013-08-05 16:49 豆沙包没有肉 阅读(143) 评论(0) 推荐(0) 编辑

2013年2月28日

摘要: 二叉树的遍历,分为深度遍历和广度遍历,其中深度遍历又分为先序、中序和后序。 二叉树的遍历用递归实现,代码形式简单,但是递归借助程序建立起深度遍历的模型显得相对抽象,故而下面的代码会设计深度遍历的非递归实现。 程序运行结果: 先序遍历的结果是:1,2,4,8,9,5,10,11,3,6,7,先序遍历( 阅读全文
posted @ 2013-02-28 11:28 豆沙包没有肉 阅读(184) 评论(0) 推荐(0) 编辑

2013年2月21日

摘要: 插入排序: 阐述: 在已排序集合中插入待排序集合中的某一元素,使得已排序集合仍然有序,直到待排序集合大小为1。 时间复杂度: 插入已排序集合的时间复杂度是O(N),遍历待排序集合的时间复杂度是O(N),所以插入排序的时间复杂度是O(N*N)。 稳定性 插入排序主要就是在挪动待排序集合的位置,并且将元 阅读全文
posted @ 2013-02-21 13:51 豆沙包没有肉 阅读(277) 评论(0) 推荐(0) 编辑

2013年2月20日

摘要: 选择排序 阐述: 每一趟排序选择出待排集合中最小的值(假设从大到小排序)放置到已排序集合之后,直到待排集合的元素都排完。 复杂度: 遍历待排集合时间复杂度O(N),确定待排集合的首位置时间复杂度O(N),所以选排的时间复杂度是O(N*N) 稳定性: 选排在将最小值置换到已排集合之后时会把相同元素的相 阅读全文
posted @ 2013-02-20 14:33 豆沙包没有肉 阅读(276) 评论(0) 推荐(0) 编辑
摘要: 冒泡排序 阐述: 通过比较相邻两个元素的值,将最小值(假设从小到大排序)置换到待排集合的首位,通俗说就是把最小值放到待排集合的前面。 冒排包括两个遍历,确定待排集合的首位置,遍历待排集合置换出最小值,所以时间复杂度是O(N*N)。 冒排的是两个相邻元素的位置交换,相邻操作很显然不会打乱相同元素的相对 阅读全文
posted @ 2013-02-20 11:16 豆沙包没有肉 阅读(323) 评论(0) 推荐(0) 编辑

2013年2月19日

摘要: 阐述: 归并排序是将两个有序表合并成新的有序表; 而子序列的划分是递归地将待排序集合折半划分多个子序列,类似一个二叉树, 另外上面的递归操作大多会涉及分治思想,通俗讲就是各个分支上的子序列的有序,为最大的序列的有序埋下基础。 所以需要lgN趟的二路合并(假设集合的规模是N),每趟合并的复杂度是O(N 阅读全文
posted @ 2013-02-19 16:22 豆沙包没有肉 阅读(342) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7

导航