博客园 - Wang Juqiang
uuid:24b78886-0ed1-41c2-8670-e3f31dcf42c4;id=151110
2017-04-13T12:51:03Z
Wang Juqiang
https://www.cnblogs.com/wangjq/
feed.cnblogs.com
https://www.cnblogs.com/wangjq/p/3977318.html
使用CruiseControl.Net全面实现持续集成 - Wang Juqiang
持续集成想必大家很多人都听说过,甚至都实践过,最近我又一次亲历了一次持续集成,现将我的经验分享给大家。关于持续集成的理论在本文概不涉及,本文的主要目的是实战CruiseControl.Net,用它来全面实现持续集成。在配置ccnet.config时会用到一些小工具,一并附上:小工具下载首先,我们来看...
2014-09-17T08:42:00Z
2014-09-17T08:42:00Z
Wang Juqiang
https://www.cnblogs.com/wangjq/
【摘要】持续集成想必大家很多人都听说过,甚至都实践过,最近我又一次亲历了一次持续集成,现将我的经验分享给大家。关于持续集成的理论在本文概不涉及,本文的主要目的是实战CruiseControl.Net,用它来全面实现持续集成。在配置ccnet.config时会用到一些小工具,一并附上:小工具下载首先,我们来看... <a href="https://www.cnblogs.com/wangjq/p/3977318.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/wangjq/p/3755691.html
Javascript 创建对象方法的总结 - Wang Juqiang
最近看了一下《Javascript高级程序设计(第三版)》,这本书很多人都推荐,我也再次郑重推荐一下。看过之后总得总结一下吧,于是我选了这么一个主题分享给大家。 使用Javascript创建对象的方法有很多,现在就来列举一下: 1. 使用Object构造函数来创建一个对象,下面代码创建了一个...
2014-05-28T02:57:00Z
2014-05-28T02:57:00Z
Wang Juqiang
https://www.cnblogs.com/wangjq/
【摘要】最近看了一下《Javascript高级程序设计(第三版)》,这本书很多人都推荐,我也再次郑重推荐一下。看过之后总得总结一下吧,于是我选了这么一个主题分享给大家。 使用Javascript创建对象的方法有很多,现在就来列举一下: 1. 使用Object构造函数来创建一个对象,下面代码创建了一个... <a href="https://www.cnblogs.com/wangjq/p/3755691.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/wangjq/p/3410856.html
基于WCF MSMQ 的企业应用解决方案 - Wang Juqiang
最近研究了一下基于MSMQ的WCF应用,从书上、网上查了很多资料,但始终没能彻底理解WCF-MSMQ的工作原理,也没能得到一个合理的应用解决方案。索性还是自己做个实验,探索一下吧。经过反复试验,颇有收获,现跟大家分享一下。 首先我的解释一下为什么查了那么多资料却未能理解WCF-MSMQ的工作原理,不是各位大牛没有把原理讲清楚,而是大多数给出的例子都是在单机上运行的,这就很难说明白离线工作的原理。 为了说明问题,我用了四台虚机来部署我的实验程序,首先我给大家看一下我的程序部署结构: 4台虚机(红线表示消息流向),它们的操作系统都是Windows2008 R2,并且都需要安装MSMQ服务...
2013-11-06T09:24:00Z
2013-11-06T09:24:00Z
Wang Juqiang
https://www.cnblogs.com/wangjq/
【摘要】最近研究了一下基于MSMQ的WCF应用,从书上、网上查了很多资料,但始终没能彻底理解WCF-MSMQ的工作原理,也没能得到一个合理的应用解决方案。索性还是自己做个实验,探索一下吧。经过反复试验,颇有收获,现跟大家分享一下。 首先我的解释一下为什么查了那么多资料却未能理解WCF-MSMQ的工作原理,不是各位大牛没有把原理讲清楚,而是大多数给出的例子都是在单机上运行的,这就很难说明白离线工作的原理。 为了说明问题,我用了四台虚机来部署我的实验程序,首先我给大家看一下我的程序部署结构: 4台虚机(红线表示消息流向),它们的操作系统都是Windows2008 R2,并且都需要安装MSMQ服务... <a href="https://www.cnblogs.com/wangjq/p/3410856.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/wangjq/archive/2012/07/16/2593485.html
设计模式学习笔记-状态模式 - Wang Juqiang
1. 概述 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。2. 解决的问题 主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同的一系列类当中,可以把复杂的逻辑判断简单化。3. 模式中的角色 3.1 上下文环境(Context):它定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的操作委托给当前的Concrete State对象来处理。 3.2 抽象状态(State):定义一个接口以封装使用上下文环境的的一个特定状态相关的行为。 3.3 具体状态(Concrete State):实现抽象状态定义的接...
2012-07-16T06:45:00Z
2012-07-16T06:45:00Z
Wang Juqiang
https://www.cnblogs.com/wangjq/
【摘要】1. 概述 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。2. 解决的问题 主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同的一系列类当中,可以把复杂的逻辑判断简单化。3. 模式中的角色 3.1 上下文环境(Context):它定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的操作委托给当前的Concrete State对象来处理。 3.2 抽象状态(State):定义一个接口以封装使用上下文环境的的一个特定状态相关的行为。 3.3 具体状态(Concrete State):实现抽象状态定义的接... <a href="https://www.cnblogs.com/wangjq/archive/2012/07/16/2593485.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/wangjq/archive/2012/07/12/2587966.html
设计模式学习笔记-观察者模式 - Wang Juqiang
1. 概述 有时被称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。2. 解决的问题 将一个系统分割成一个一些类相互协作的类有一个不好的副作用,那就是需要维护相关对象间的一致性。我们不希望为了维持一致性而使各类紧密耦合,这样会给维护、扩展和重用都带来不便。观察者就是解决这类的耦合关系的。3. 模式中的角色 3.1 抽象主题(Subject):它把所有观察者对象的引用保存到一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象。 ...
2012-07-12T08:24:00Z
2012-07-12T08:24:00Z
Wang Juqiang
https://www.cnblogs.com/wangjq/
【摘要】1. 概述 有时被称作发布/订阅模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。2. 解决的问题 将一个系统分割成一个一些类相互协作的类有一个不好的副作用,那就是需要维护相关对象间的一致性。我们不希望为了维持一致性而使各类紧密耦合,这样会给维护、扩展和重用都带来不便。观察者就是解决这类的耦合关系的。3. 模式中的角色 3.1 抽象主题(Subject):它把所有观察者对象的引用保存到一个聚集里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象。 ... <a href="https://www.cnblogs.com/wangjq/archive/2012/07/12/2587966.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/wangjq/archive/2012/07/11/2585930.html
设计模式学习笔记-命令模式 - Wang Juqiang
1. 概述 将一个请求封装为一个对象(即我们创建的Command对象),从而使你可用不同的请求对客户进行参数化; 对请求排队或记录请求日志,以及支持可撤销的操作。2. 解决的问题 在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。3. 模式中角色 3.1 抽象命令(Command):定义命令的接口,声明执行的方法。 3.2 具体命令(ConcreteCommand):具体命令,实现要执行的方法,它通常是“虚”的实现;通常会有接收者,并调用接收者的功能来完成命令要执行的操作。...
2012-07-11T05:30:00Z
2012-07-11T05:30:00Z
Wang Juqiang
https://www.cnblogs.com/wangjq/
【摘要】1. 概述 将一个请求封装为一个对象(即我们创建的Command对象),从而使你可用不同的请求对客户进行参数化; 对请求排队或记录请求日志,以及支持可撤销的操作。2. 解决的问题 在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。3. 模式中角色 3.1 抽象命令(Command):定义命令的接口,声明执行的方法。 3.2 具体命令(ConcreteCommand):具体命令,实现要执行的方法,它通常是“虚”的实现;通常会有接收者,并调用接收者的功能来完成命令要执行的操作。... <a href="https://www.cnblogs.com/wangjq/archive/2012/07/11/2585930.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/wangjq/archive/2012/07/10/2583672.html
设计模式学习笔记-外观模式 - Wang Juqiang
1. 概述 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。2. 模式中的角色 2.1 外观类(Facade):外观类知道哪些子系统类负责处理请求,将客户的请求代理给恰当的子系统对象。 2.2 子系统类集合(SubSystem Classes):子系统类集合实现了子系统的功能,处理外观类对象指派的任务。3. 模式解读 3.1 外观模式的类图 3.2 外观模式的代码实现 /// <summary> /// 子系统中的一个类 /// </summary> public class SubSystemOne ...
2012-07-10T10:12:00Z
2012-07-10T10:12:00Z
Wang Juqiang
https://www.cnblogs.com/wangjq/
【摘要】1. 概述 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。2. 模式中的角色 2.1 外观类(Facade):外观类知道哪些子系统类负责处理请求,将客户的请求代理给恰当的子系统对象。 2.2 子系统类集合(SubSystem Classes):子系统类集合实现了子系统的功能,处理外观类对象指派的任务。3. 模式解读 3.1 外观模式的类图 3.2 外观模式的代码实现 /// <summary> /// 子系统中的一个类 /// </summary> public class SubSystemOne ... <a href="https://www.cnblogs.com/wangjq/archive/2012/07/10/2583672.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/wangjq/archive/2012/07/09/2582978.html
设计模式学习笔记-模板方法模式 - Wang Juqiang
1. 概述 定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。2. 模式中的角色 2.1 抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。 2.2 具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。3. 模式解读 3.1 模板方法类图 3.2 模板方法模式代码实现 /// <summary> /// 抽象类 /// </summary> public abstract class AbstractClass { /...
2012-07-09T10:17:00Z
2012-07-09T10:17:00Z
Wang Juqiang
https://www.cnblogs.com/wangjq/
【摘要】1. 概述 定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。2. 模式中的角色 2.1 抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。 2.2 具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。3. 模式解读 3.1 模板方法类图 3.2 模板方法模式代码实现 /// <summary> /// 抽象类 /// </summary> public abstract class AbstractClass { /... <a href="https://www.cnblogs.com/wangjq/archive/2012/07/09/2582978.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/wangjq/archive/2012/07/09/2582485.html
设计模式学习笔记-适配器模式 - Wang Juqiang
1. 概述 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。2. 解决的问题 即Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。3. 模式中的角色 3.1 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。 3.2 需要适配的类(Adaptee):需要适配的类或适配者类。 3.3 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。 4. 模式解读 注:在GoF的设计模式中,对适配器模式讲了两种类型,类适配器模式和对...
2012-07-09T05:36:00Z
2012-07-09T05:36:00Z
Wang Juqiang
https://www.cnblogs.com/wangjq/
【摘要】1. 概述 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。2. 解决的问题 即Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。3. 模式中的角色 3.1 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。 3.2 需要适配的类(Adaptee):需要适配的类或适配者类。 3.3 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。 4. 模式解读 注:在GoF的设计模式中,对适配器模式讲了两种类型,类适配器模式和对... <a href="https://www.cnblogs.com/wangjq/archive/2012/07/09/2582485.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/wangjq/archive/2012/07/09/2579797.html
【翻译】ASP.NET缓存管理 - Wang Juqiang
看到一篇好文章,翻译一下给大家分享。原文地址:http://www.codeproject.com/Articles/12097/Cache-Management-in-ASP-NET引言在解释ASP.NET中的缓存管理之前,我先澄清一下,不同的人使用不同的术语来解释同样的概念,有些人把它描述为状态管理,有些人描述为缓存管理。我喜欢用缓存管理,或许是因为我喜欢这个词“Cache”吧。 但是就所指含义来说,它们两个没有区别。现在让我们来探讨一下在ASP.NET环境下缓存管理的各个方面吧。尽管缓存管理在Windows应用程序中已经不再是个问题,但在web环境下依然是个挑战。因为HTTP是一个无状态
2012-07-09T02:17:00Z
2012-07-09T02:17:00Z
Wang Juqiang
https://www.cnblogs.com/wangjq/
【摘要】看到一篇好文章,翻译一下给大家分享。原文地址:http://www.codeproject.com/Articles/12097/Cache-Management-in-ASP-NET引言在解释ASP.NET中的缓存管理之前,我先澄清一下,不同的人使用不同的术语来解释同样的概念,有些人把它描述为状态管理,有些人描述为缓存管理。我喜欢用缓存管理,或许是因为我喜欢这个词“Cache”吧。 但是就所指含义来说,它们两个没有区别。现在让我们来探讨一下在ASP.NET环境下缓存管理的各个方面吧。尽管缓存管理在Windows应用程序中已经不再是个问题,但在web环境下依然是个挑战。因为HTTP是一个无状态 <a href="https://www.cnblogs.com/wangjq/archive/2012/07/09/2579797.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/wangjq/archive/2012/07/06/2579244.html
设计模式学习笔记-组合模式 - Wang Juqiang
1. 概述 将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。2. 解决的问题 当希望忽略单个对象和组合对象的区别,统一使用组合结构中的所有对象(将这种“统一”性封装起来)。3. 组合模式中的角色 3.1 组合部件(Component):它是一个抽象角色,为要组合的对象提供统一的接口。 3.2 叶子(Leaf):在组合中表示子节点对象,叶子节点不能有子节点。 3.3 合成部件(Composite):定义有枝节点的行为,用来存储部件,实现在Component接口中的有关操作,如增加(Add)和删除(Remove)。4. 模式解读 ...
2012-07-06T06:18:00Z
2012-07-06T06:18:00Z
Wang Juqiang
https://www.cnblogs.com/wangjq/
【摘要】1. 概述 将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。2. 解决的问题 当希望忽略单个对象和组合对象的区别,统一使用组合结构中的所有对象(将这种“统一”性封装起来)。3. 组合模式中的角色 3.1 组合部件(Component):它是一个抽象角色,为要组合的对象提供统一的接口。 3.2 叶子(Leaf):在组合中表示子节点对象,叶子节点不能有子节点。 3.3 合成部件(Composite):定义有枝节点的行为,用来存储部件,实现在Component接口中的有关操作,如增加(Add)和删除(Remove)。4. 模式解读 ... <a href="https://www.cnblogs.com/wangjq/archive/2012/07/06/2579244.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/wangjq/archive/2012/07/05/2578162.html
设计模式学习笔记-桥接模式 - Wang Juqiang
1. 概述 将抽象部分(Abstraction)与实现部分(Implementor)分离,使它们可以独立地变化。2. 解决的问题 在软件系统中,有些类型由于自身的逻辑,它具有两个或多个维度的变化。为了解决这种多维度变化,又不引入复杂度,这就要使用Bridge模式。3. 模式中的角色 2.1 抽象(Abstraction):定义抽象接口,该接口中包含实现具体行为、具体特征的Implementor接口。 2.2 提炼的抽象(RefinedAbstraction):继承自Abstraction的子类,依旧是一个抽象的事物名。 2.3 实现(Implementor):定义具体行为,具体特...
2012-07-05T09:47:00Z
2012-07-05T09:47:00Z
Wang Juqiang
https://www.cnblogs.com/wangjq/
【摘要】1. 概述 将抽象部分(Abstraction)与实现部分(Implementor)分离,使它们可以独立地变化。2. 解决的问题 在软件系统中,有些类型由于自身的逻辑,它具有两个或多个维度的变化。为了解决这种多维度变化,又不引入复杂度,这就要使用Bridge模式。3. 模式中的角色 2.1 抽象(Abstraction):定义抽象接口,该接口中包含实现具体行为、具体特征的Implementor接口。 2.2 提炼的抽象(RefinedAbstraction):继承自Abstraction的子类,依旧是一个抽象的事物名。 2.3 实现(Implementor):定义具体行为,具体特... <a href="https://www.cnblogs.com/wangjq/archive/2012/07/05/2578162.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/wangjq/archive/2012/07/05/2573258.html
设计模式学习笔记-准备篇 - Wang Juqiang
1. 设计模式的重要性 1.1设计模式解决的是在软件过程中如何来实现具体的软件功能。实现同一个功能的方法有很多,哪个设计容易扩展,容易复用,松耦合,可维护?设计模式指导我们找到最优方案。 1.2设计中往往会存在设计缺陷,这些缺陷包括: 僵化性:难以对软件进行改动,即使在功能上来看是很小的改动 脆弱性:在进行很小的改动时,可能导致很多地方出现问题 顽固性:要把系统中某些通用的功能分离出来的努力和风险非常巨大 粘滞性:当面临改动时,改动的方案有很多,一些会保持设计,一些会破坏设计,当采用保持设计的方法比用破坏设计的方法更难应付变化时,说明原设计具有较高的粘滞性 晦...
2012-07-05T05:37:00Z
2012-07-05T05:37:00Z
Wang Juqiang
https://www.cnblogs.com/wangjq/
【摘要】1. 设计模式的重要性 1.1设计模式解决的是在软件过程中如何来实现具体的软件功能。实现同一个功能的方法有很多,哪个设计容易扩展,容易复用,松耦合,可维护?设计模式指导我们找到最优方案。 1.2设计中往往会存在设计缺陷,这些缺陷包括: 僵化性:难以对软件进行改动,即使在功能上来看是很小的改动 脆弱性:在进行很小的改动时,可能导致很多地方出现问题 顽固性:要把系统中某些通用的功能分离出来的努力和风险非常巨大 粘滞性:当面临改动时,改动的方案有很多,一些会保持设计,一些会破坏设计,当采用保持设计的方法比用破坏设计的方法更难应付变化时,说明原设计具有较高的粘滞性 晦... <a href="https://www.cnblogs.com/wangjq/archive/2012/07/05/2573258.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/wangjq/archive/2012/07/04/2575921.html
设计模式学习笔记-代理模式 - Wang Juqiang
1. 概述 为其它对象提供一种代理以控制对这个对象的访问。 解决的问题:如果直接访问对象比较困难,或直接访问会给使用者或系统带来一系列问题。这样对于客户端(调用者)来说,就不需要直接与真实对象进行交互,解除了调用者与真实对象的耦合。2. 模式中的角色 2.1 抽象实体(Subject):定义了真实实体(RealSubject)和代理(Proxy)的公共接口,这样就在任何时候使用真实实体(RealSubject)的地方使用代理(Proxy)。 2.2 代理(Proxy):保存一个引用使得代理可以直接访问真实实体,并提供一个与Subject的接口相同的接口,这样代理就可以代替真实实体。 ...
2012-07-04T03:40:00Z
2012-07-04T03:40:00Z
Wang Juqiang
https://www.cnblogs.com/wangjq/
【摘要】1. 概述 为其它对象提供一种代理以控制对这个对象的访问。 解决的问题:如果直接访问对象比较困难,或直接访问会给使用者或系统带来一系列问题。这样对于客户端(调用者)来说,就不需要直接与真实对象进行交互,解除了调用者与真实对象的耦合。2. 模式中的角色 2.1 抽象实体(Subject):定义了真实实体(RealSubject)和代理(Proxy)的公共接口,这样就在任何时候使用真实实体(RealSubject)的地方使用代理(Proxy)。 2.2 代理(Proxy):保存一个引用使得代理可以直接访问真实实体,并提供一个与Subject的接口相同的接口,这样代理就可以代替真实实体。 ... <a href="https://www.cnblogs.com/wangjq/archive/2012/07/04/2575921.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/wangjq/archive/2012/07/03/2574755.html
设计模式学习笔记-装饰模式 - Wang Juqiang
1. 概述 动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更灵活。 原理:增加一个修饰类包裹原来的类,包裹的方式一般是通过在将原来的对象作为修饰类的构造函数的参数。装饰类实现新的功能,但是,在不需要用到新功能的地方,它可以直接调用原来的类中的方法。修饰类必须和原来的类有相同的接口。2. 模式中的角色 2.1 抽象构建(Component):定义一个抽象接口,用以给这些对象动态地添加职责。 2.2 具体构建(ConcreteComponent):定义一个具体的对象,也可以给这个对象添加一些职责。 2.3 装饰类(Decorator): 装饰抽象类,继承了Comp...
2012-07-03T07:00:00Z
2012-07-03T07:00:00Z
Wang Juqiang
https://www.cnblogs.com/wangjq/
【摘要】1. 概述 动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更灵活。 原理:增加一个修饰类包裹原来的类,包裹的方式一般是通过在将原来的对象作为修饰类的构造函数的参数。装饰类实现新的功能,但是,在不需要用到新功能的地方,它可以直接调用原来的类中的方法。修饰类必须和原来的类有相同的接口。2. 模式中的角色 2.1 抽象构建(Component):定义一个抽象接口,用以给这些对象动态地添加职责。 2.2 具体构建(ConcreteComponent):定义一个具体的对象,也可以给这个对象添加一些职责。 2.3 装饰类(Decorator): 装饰抽象类,继承了Comp... <a href="https://www.cnblogs.com/wangjq/archive/2012/07/03/2574755.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/wangjq/archive/2012/07/03/2570344.html
设计模式学习笔记-策略模式 - Wang Juqiang
在讲策略模式之前,我先给大家举个日常生活中的例子,从首都国际机场到XXX酒店,怎么过去?1)酒店接机服务,直接开车来接。2)打车过去。3)机场快轨+地铁 4)机场巴士 5)公交车 6)走路过去(不跑累死的话) 等等。使用方法,我们都可以达到从机场到XXX酒店的目的,对吧。那么我所列出的从机场到XXX酒店的的方法,就是我们可以选择的策略。 再举个例子,就是我们使用WCF时,往往避免不了对它进行扩展,例如授权,我们可以通过自定义授权来扩展WCF。这里我们可以通过自定义AuthorizationPolicy和ServiceAuthorizationManager来实现对它的扩展,这是策略模式的...
2012-07-03T02:35:00Z
2012-07-03T02:35:00Z
Wang Juqiang
https://www.cnblogs.com/wangjq/
【摘要】在讲策略模式之前,我先给大家举个日常生活中的例子,从首都国际机场到XXX酒店,怎么过去?1)酒店接机服务,直接开车来接。2)打车过去。3)机场快轨+地铁 4)机场巴士 5)公交车 6)走路过去(不跑累死的话) 等等。使用方法,我们都可以达到从机场到XXX酒店的目的,对吧。那么我所列出的从机场到XXX酒店的的方法,就是我们可以选择的策略。 再举个例子,就是我们使用WCF时,往往避免不了对它进行扩展,例如授权,我们可以通过自定义授权来扩展WCF。这里我们可以通过自定义AuthorizationPolicy和ServiceAuthorizationManager来实现对它的扩展,这是策略模式的... <a href="https://www.cnblogs.com/wangjq/archive/2012/07/03/2570344.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/wangjq/archive/2012/07/02/2558255.html
设计模式学习笔记-简单工厂模式 - Wang Juqiang
设计模式
2012-07-02T07:00:00Z
2012-07-02T07:00:00Z
Wang Juqiang
https://www.cnblogs.com/wangjq/
【摘要】设计模式 <a href="https://www.cnblogs.com/wangjq/archive/2012/07/02/2558255.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/wangjq/archive/2012/07/02/2558696.html
设计模式学习笔记-工厂方法模式 - Wang Juqiang
1. 概述: 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。2. 模式中的角色 2.1 抽象工厂(Creator):这个抽象类(或接口)声明一个创建对象的工厂方法,用来返回一个Product类型的对象。 2.2 具体工厂(ConcreteCreator):重定义工厂方法,返回一个具体的Concrete Product实例。 2.3 抽象产品(Product):定义工厂方法所创建的对象。 2.4 具体产品(ConcreteProduct): 具体产品,继承自Product抽象类。3. 模式解读 3.1工厂方法模式的一般化类图 ...
2012-07-02T02:33:00Z
2012-07-02T02:33:00Z
Wang Juqiang
https://www.cnblogs.com/wangjq/
【摘要】1. 概述: 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。2. 模式中的角色 2.1 抽象工厂(Creator):这个抽象类(或接口)声明一个创建对象的工厂方法,用来返回一个Product类型的对象。 2.2 具体工厂(ConcreteCreator):重定义工厂方法,返回一个具体的Concrete Product实例。 2.3 抽象产品(Product):定义工厂方法所创建的对象。 2.4 具体产品(ConcreteProduct): 具体产品,继承自Product抽象类。3. 模式解读 3.1工厂方法模式的一般化类图 ... <a href="https://www.cnblogs.com/wangjq/archive/2012/07/02/2558696.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/wangjq/archive/2012/06/28/2561250.html
设计模式学习笔记-单例模式 - Wang Juqiang
1. 描述: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。2. 单例模式主要有3个特点,: 2.1 单例类确保自己只有一个实例。 2.2 单例类必须自己创建自己的实例。 2.3 单例类必须为其他对象提供唯一的实例。3. 实现方式:懒汉单例类和饿汉单例类 3.1懒汉式单例类 对于懒汉模式,我们可以这样理解:该单例类非常懒,只有在自身需要的时候才会行动,从来不知道及早做好准备。它在需要对象的时候,才判断是否已有对象,如果没有就立即创建一个对象,然后返回,如果已有对象就不再创建,立即返回。懒汉模式只在外部对象第一次请求实例的时候才去创建。 3.2饿汉式单例 对于饿汉...
2012-06-28T08:45:00Z
2012-06-28T08:45:00Z
Wang Juqiang
https://www.cnblogs.com/wangjq/
【摘要】1. 描述: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。2. 单例模式主要有3个特点,: 2.1 单例类确保自己只有一个实例。 2.2 单例类必须自己创建自己的实例。 2.3 单例类必须为其他对象提供唯一的实例。3. 实现方式:懒汉单例类和饿汉单例类 3.1懒汉式单例类 对于懒汉模式,我们可以这样理解:该单例类非常懒,只有在自身需要的时候才会行动,从来不知道及早做好准备。它在需要对象的时候,才判断是否已有对象,如果没有就立即创建一个对象,然后返回,如果已有对象就不再创建,立即返回。懒汉模式只在外部对象第一次请求实例的时候才去创建。 3.2饿汉式单例 对于饿汉... <a href="https://www.cnblogs.com/wangjq/archive/2012/06/28/2561250.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/wangjq/archive/2012/06/28/2567406.html
设计模式学习笔记-原型模式 - Wang Juqiang
1. 概述 通过复制一个已经存在的实例来创建一个新的实例。被复制的实例被称为原型,这个原型是可定制的。2. 模式中的角色 2.1 抽象原型类(Abstract Prototype):提供一个克隆接口 2.2 具体原型类(Concrete Prototype): 及实现了克隆接口的具体原型类3. 实例:求职网站上现在都支持多份简历,如果每创建一份简历都要从头至尾地填写一遍,那也是非常让人沮丧的事。其实针对我们的求职岗位的不同,不同的简历可能只要修改局部内容就可以了,而不用全部重新构建一份新的简历。复制一份简历,然后做局部修改是最让人省心的了! 3.1 实现类图 类图解读 在.NE...
2012-06-28T04:42:00Z
2012-06-28T04:42:00Z
Wang Juqiang
https://www.cnblogs.com/wangjq/
【摘要】1. 概述 通过复制一个已经存在的实例来创建一个新的实例。被复制的实例被称为原型,这个原型是可定制的。2. 模式中的角色 2.1 抽象原型类(Abstract Prototype):提供一个克隆接口 2.2 具体原型类(Concrete Prototype): 及实现了克隆接口的具体原型类3. 实例:求职网站上现在都支持多份简历,如果每创建一份简历都要从头至尾地填写一遍,那也是非常让人沮丧的事。其实针对我们的求职岗位的不同,不同的简历可能只要修改局部内容就可以了,而不用全部重新构建一份新的简历。复制一份简历,然后做局部修改是最让人省心的了! 3.1 实现类图 类图解读 在.NE... <a href="https://www.cnblogs.com/wangjq/archive/2012/06/28/2567406.html" target="_blank">阅读全文</a>