摘要:1概述 当一个请求,有多个处理对象时,如果硬编码指定某个由某个对象来处理,需要采用ifelse的结构,从而产生了代码的耦合,如果要添加新的请求处理对象或调整请求处理的次序,必然会修改同一个方法,违背开闭原则。2 GOF中的定义意图: 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。结构图:适用性:1>有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。2>你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。3>解耦ifelse,将处理对象组织一个链并希望处 阅读全文
Observer 观察者模式
2012-08-23 13:42 by Mike.Jiang, 568 阅读, 0 推荐, 收藏, 编辑
摘要:1 GOF中的定义意图定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。[GOF 《设计模式》]结构图2.概述个人感觉观察者模式定义的比较不容易理解:什么多个观察者关注某个主题的,这个模式解决的是当一个对象需要调用一系列对象的方法时,并且是被调用方自己注册自己是否被调用,调用方不知道要调用哪些方法的问题。3生活中的例子现在,银行业务中有一项,当账号金额发生变化时就进行通知,默认是通知到手机,也可以选择将信息同时发送到邮箱。4.调用方依赖被调用方情景1:在这个业务的起初,账号金额变化,通知到手机实现:View Code public... 阅读全文
Command命令模式
2012-08-22 09:36 by Mike.Jiang, 525 阅读, 0 推荐, 收藏, 编辑
摘要:1 GOF中的定义1.1意图将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作1.2结构图2 初步理解方法调用代码:View Code public class ClassA { public int Compute() { Calc c = new Calc(); return c.Execute(); } } public class Calc { public int Execute() ... 阅读全文
SQL JOIN--Nested Join
2012-08-14 23:48 by Mike.Jiang, 3099 阅读, 1 推荐, 收藏, 编辑
摘要:概述数据库主要有三种物理连接方式:nested join, merge join ,hash join。 这次主要说说nested join(NL).在NL中,两个相连的集合分别是outertable,innertable.SELECT * FROM OrderDetails AS OD INNER JOIN [Order] AS O ON OD.order_id=O.id其中,Order表为outertable,OrderDetaiils 表为innertable.但数据库优化器会选择较小的表作为outertable简单算法描述首先,outertable中取出一行,然后分别与innertab 阅读全文
模板方法Template
2012-08-09 13:53 by Mike.Jiang, 272 阅读, 0 推荐, 收藏, 编辑
摘要:动机: 在面向对象的世界里,代码复用主要体现在继承。然而当我们想让子类不仅能继承,而且也能重新定义方法时,很自然地就想到重写方法,但是这样是把整个方法的重写。如果我们有这样的一种需求,在父类的某个方法只能完成方法一个部分,而另一部分必须由子类去完成(这种应用在编写框架时遇到的很多),并且在调用这些由子类实现的方法有一定的逻辑。当有这样的需求时,我们应该怎么办——模板方法。意图:定 义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。代码实现View Code public class Temp... 阅读全文
策略模式
2012-08-08 17:27 by Mike.Jiang, 366 阅读, 1 推荐, 收藏, 编辑
摘要:一、概念策略模式(Strategy):它定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法的变化不会影响到使用算法的客户。二,应用示例 采用《大话设计模式》中的商场收银的例子,即在收银算法对某个商品,可能是正常收费也可能是打折收费,也有可能是满200返20的。三,普通青年解决方案 写一个条件判断,根据不同的收费类型,调用不同的收银方法View Code string type = ""; switch (type) { case "Nomal": ... 阅读全文
SQL参数化查询的另一个理由——命中执行计划
2012-08-02 21:55 by Mike.Jiang, 1886 阅读, 2 推荐, 收藏, 编辑
摘要:1概述 SQL语言的本质就是一串伪代码,表达的是做什么,而不是怎么做的意思。如其它语言一样,SQL语句需要编译之后才能运行,所以每一条SQL是需要通过编译器解释才能运行的(在这之间还要做SQL的优化)。而这些步骤都是需要运行成本,所以在数据库中有一个叫做执行计划的东西,编译器会将编译过后的SQL存入执行计划当中,当遇到同样的SQL时,就直接调用执行计划来执行,而不需要再次编译。 通过对上面执行计划的认识,为了提高数据库运行的效率,我们需要尽可能的命中执行计划,这样就可以节省运行时间。2相关SQL2.1查看当前数据库中所有的执行计划:View Code SELECT cp.usecounts . 阅读全文
可多选的下拉列表框
2012-07-20 17:15 by Mike.Jiang, 29835 阅读, 3 推荐, 收藏, 编辑
摘要:在网友的使用时,出现一些问题,更新如下:1>在.list加入 z-index:100000;2>将wraper中的样式position:relative删除3>$this.click(function (e) { $(".list").hide();//此句新添加的 $list.toggle(); e.stopPropagation(); });加入$(".list").hide();这次更新的东西,一会JS有用一会没用,疼。。。(UL样式与博客园中的冲突,所以看起起怪怪的)背景:同事在网上的找的下拉列表框出现位置不对的和加载慢的BUG 阅读全文
一列保存多个ID(将多个用逗号隔开的ID转换成用逗号隔开的名称)
2012-07-19 01:20 by Mike.Jiang, 4362 阅读, 0 推荐, 收藏, 编辑
摘要:背景:在做项目时,经常会遇到这样的表结构在主表的中有一列保存的是用逗号隔开ID。如,当一个员工从属多个部门时、当一个项目从属多个城市时、当一个设备从属多个项目时,很多人都会在员工表中加入一个deptIds VARCHAR(1000)列(本文以员工从属多个部门为例),用以保存部门编号列表(很明显这不符合第一范式,但很多人这样设计了,在这篇文章中我们暂不讨论在这种应用场景下,如此设计的对与错,有兴趣的可以在回复中聊聊),然后我们在查询列表中需要看到这个员工从属哪些部门。初始化数据:部门表、员工表数据:View Code IF EXISTS (SELECT * FROM sys.objects W. 阅读全文
SQL 判断两个时间段是否有交叉
2012-07-18 11:19 by Mike.Jiang, 6035 阅读, 0 推荐, 收藏, 编辑
摘要:费话不说,直接上代码SQL 代码:View Code IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[fun_GetTimeSlotDays]'))DROP FUNCTION [dbo].fun_GetTimeSlotDaysGO-- =============================================-- Author: <Mike.Jiang>-- Create date: <2012-07-18>-- Description: 阅读全文