摘要: 1. 概述 将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。2. 解决的问题 当希望忽略单个对象和组合对象的区别,统一使用组合结构中的所有对象(将这种“统一”性封装起来)。3. 组合模式中的角色 3.1 组合部件(Component):它是一个抽象角色,为要组合的对象提供统一的接口。 3.2 叶子(Leaf):在组合中表示子节点对象,叶子节点不能有子节点。 3.3 合成部件(Composite):定义有枝节点的行为,用来存储部件,实现在Component接口中的有关操作,如增加(Add)和删除(Remove)。4. 模式解读 ... 阅读全文
posted @ 2012-07-06 14:18 Wang Juqiang 阅读(4326) 评论(2) 推荐(1) 编辑
摘要: 1. 概述 将抽象部分(Abstraction)与实现部分(Implementor)分离,使它们可以独立地变化。2. 解决的问题 在软件系统中,有些类型由于自身的逻辑,它具有两个或多个维度的变化。为了解决这种多维度变化,又不引入复杂度,这就要使用Bridge模式。3. 模式中的角色 2.1 抽象(Abstraction):定义抽象接口,该接口中包含实现具体行为、具体特征的Implementor接口。 2.2 提炼的抽象(RefinedAbstraction):继承自Abstraction的子类,依旧是一个抽象的事物名。 2.3 实现(Implementor):定义具体行为,具体特... 阅读全文
posted @ 2012-07-05 17:47 Wang Juqiang 阅读(4995) 评论(1) 推荐(1) 编辑
摘要: 1. 设计模式的重要性 1.1设计模式解决的是在软件过程中如何来实现具体的软件功能。实现同一个功能的方法有很多,哪个设计容易扩展,容易复用,松耦合,可维护?设计模式指导我们找到最优方案。 1.2设计中往往会存在设计缺陷,这些缺陷包括: 僵化性:难以对软件进行改动,即使在功能上来看是很小的改动 脆弱性:在进行很小的改动时,可能导致很多地方出现问题 顽固性:要把系统中某些通用的功能分离出来的努力和风险非常巨大 粘滞性:当面临改动时,改动的方案有很多,一些会保持设计,一些会破坏设计,当采用保持设计的方法比用破坏设计的方法更难应付变化时,说明原设计具有较高的粘滞性 晦... 阅读全文
posted @ 2012-07-05 13:37 Wang Juqiang 阅读(3149) 评论(10) 推荐(5) 编辑
摘要: 1. 概述 为其它对象提供一种代理以控制对这个对象的访问。 解决的问题:如果直接访问对象比较困难,或直接访问会给使用者或系统带来一系列问题。这样对于客户端(调用者)来说,就不需要直接与真实对象进行交互,解除了调用者与真实对象的耦合。2. 模式中的角色 2.1 抽象实体(Subject):定义了真实实体(RealSubject)和代理(Proxy)的公共接口,这样就在任何时候使用真实实体(RealSubject)的地方使用代理(Proxy)。 2.2 代理(Proxy):保存一个引用使得代理可以直接访问真实实体,并提供一个与Subject的接口相同的接口,这样代理就可以代替真实实体。 ... 阅读全文
posted @ 2012-07-04 11:40 Wang Juqiang 阅读(5450) 评论(1) 推荐(2) 编辑
摘要: 1. 概述 动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更灵活。 原理:增加一个修饰类包裹原来的类,包裹的方式一般是通过在将原来的对象作为修饰类的构造函数的参数。装饰类实现新的功能,但是,在不需要用到新功能的地方,它可以直接调用原来的类中的方法。修饰类必须和原来的类有相同的接口。2. 模式中的角色 2.1 抽象构建(Component):定义一个抽象接口,用以给这些对象动态地添加职责。 2.2 具体构建(ConcreteComponent):定义一个具体的对象,也可以给这个对象添加一些职责。 2.3 装饰类(Decorator): 装饰抽象类,继承了Comp... 阅读全文
posted @ 2012-07-03 15:00 Wang Juqiang 阅读(8085) 评论(3) 推荐(2) 编辑
摘要: 在讲策略模式之前,我先给大家举个日常生活中的例子,从首都国际机场到XXX酒店,怎么过去?1)酒店接机服务,直接开车来接。2)打车过去。3)机场快轨+地铁 4)机场巴士 5)公交车 6)走路过去(不跑累死的话) 等等。使用方法,我们都可以达到从机场到XXX酒店的目的,对吧。那么我所列出的从机场到XXX酒店的的方法,就是我们可以选择的策略。 再举个例子,就是我们使用WCF时,往往避免不了对它进行扩展,例如授权,我们可以通过自定义授权来扩展WCF。这里我们可以通过自定义AuthorizationPolicy和ServiceAuthorizationManager来实现对它的扩展,这是策略模式的... 阅读全文
posted @ 2012-07-03 10:35 Wang Juqiang 阅读(7745) 评论(3) 推荐(2) 编辑
摘要: 设计模式 阅读全文
posted @ 2012-07-02 15:00 Wang Juqiang 阅读(7702) 评论(0) 推荐(3) 编辑
摘要: 1. 概述: 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。2. 模式中的角色 2.1 抽象工厂(Creator):这个抽象类(或接口)声明一个创建对象的工厂方法,用来返回一个Product类型的对象。 2.2 具体工厂(ConcreteCreator):重定义工厂方法,返回一个具体的Concrete Product实例。 2.3 抽象产品(Product):定义工厂方法所创建的对象。 2.4 具体产品(ConcreteProduct): 具体产品,继承自Product抽象类。3. 模式解读 3.1工厂方法模式的一般化类图 ... 阅读全文
posted @ 2012-07-02 10:33 Wang Juqiang 阅读(3579) 评论(0) 推荐(0) 编辑
摘要: 1. 描述: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。2. 单例模式主要有3个特点,: 2.1 单例类确保自己只有一个实例。 2.2 单例类必须自己创建自己的实例。 2.3 单例类必须为其他对象提供唯一的实例。3. 实现方式:懒汉单例类和饿汉单例类 3.1懒汉式单例类 对于懒汉模式,我们可以这样理解:该单例类非常懒,只有在自身需要的时候才会行动,从来不知道及早做好准备。它在需要对象的时候,才判断是否已有对象,如果没有就立即创建一个对象,然后返回,如果已有对象就不再创建,立即返回。懒汉模式只在外部对象第一次请求实例的时候才去创建。 3.2饿汉式单例 对于饿汉... 阅读全文
posted @ 2012-06-28 16:45 Wang Juqiang 阅读(4416) 评论(3) 推荐(2) 编辑
摘要: 1. 概述 通过复制一个已经存在的实例来创建一个新的实例。被复制的实例被称为原型,这个原型是可定制的。2. 模式中的角色 2.1 抽象原型类(Abstract Prototype):提供一个克隆接口 2.2 具体原型类(Concrete Prototype): 及实现了克隆接口的具体原型类3. 实例:求职网站上现在都支持多份简历,如果每创建一份简历都要从头至尾地填写一遍,那也是非常让人沮丧的事。其实针对我们的求职岗位的不同,不同的简历可能只要修改局部内容就可以了,而不用全部重新构建一份新的简历。复制一份简历,然后做局部修改是最让人省心的了! 3.1 实现类图 类图解读 在.NE... 阅读全文
posted @ 2012-06-28 12:42 Wang Juqiang 阅读(2956) 评论(0) 推荐(1) 编辑