随笔分类 -  design-pattern

数据即代码
摘要:配置本质上是一种元数据也是一种DSL,这和Lisp基于S表达式的“数据即代码,代码即数据”没有本质区别。在C++、Java等程序中引入配置文件的目的正是用DSL弥补通用语言表达能力和灵活性的不足。把主要业务逻辑都放到配置中,再通过程序解释执行配置的设计方法,我称之为元驱动编程(Meta Driven Programming)。 阅读全文

posted @ 2013-08-09 10:11 Todd Wei 阅读(4651) 评论(4) 推荐(6) 编辑

MVCC在分布式系统中的应用
摘要:本文介绍了一种基于多版本并发控制(MVCC)思想的Conditional Update解决分布式系统并发控制问题的方法。和基于悲观锁的方法相比,该方法避免了大粒度和长时间的锁定,能更好地适应对读的响应速度和并发性要求高的场景。 阅读全文

posted @ 2012-03-13 07:35 Todd Wei 阅读(5095) 评论(6) 推荐(10) 编辑

用流畅接口构造内部DSL
摘要:普通的API抽象方式存在天然的缺陷,通过基本元素/语义构造更高级抽象元素/语义的时候,语言的构造规则很大程度上限制了抽象的维度,我们很难跳出这个维度去,甚至可能根本意识不到这个限制。流畅接口不同于传统的API设计,它突破了语言抽象机制带来的定势思维,根据问题域选取适当的抽象维度,利用语言的基本语法构造领域特定的语义和语法。本文介绍了流畅接口的构造的4种典型抽象:基本语义抽象,管道抽象,层次结构抽象,异步抽象。 阅读全文

posted @ 2011-10-30 21:15 Todd Wei 阅读(11153) 评论(23) 推荐(21) 编辑

用dynamic增强C#泛型表达力
摘要:由于C#采用基于reification的泛型机制,泛型类会单独编译,并且在运行时存在;因此,C#对于泛型参数的要求更加严格,只能通过where关键字表达基于继承关系的约束,无法通过duck typing的方式表达类型约束。本文介绍了一种基于动态duck typing机制的泛型参数约束方法,增强了C#的泛型表达能力。 阅读全文

posted @ 2010-11-21 11:30 Todd Wei 阅读(6536) 评论(7) 推荐(3) 编辑

闭包和对象的关系
摘要:本文探讨了闭包(Closure)的概念与应用,比较了闭包形式与class形式的异同,并提出了在C#3.0中通过闭包创建对象的闭包工厂模式(Closure Factory Pattern)。 阅读全文

posted @ 2010-11-01 08:56 Todd Wei 阅读(5565) 评论(13) 推荐(4) 编辑

一句话设计模式之Flyweight模式
摘要:Flyweight模式中被共享的小对象是基于值语义的引用。 阅读全文

posted @ 2010-03-09 20:00 Todd Wei 阅读(413) 评论(0) 推荐(0) 编辑

单一职责原则
摘要:单一职责原则(Single Responsibility Principle,SRP)是Bob大叔提倡的S.O.L.I.D五大设计原则中的第一个。SRP比较容易让人望文生义产生误解。理解SRP的关键在于理解类的抽象层次,高层次的类是高层概念的抽象,低层次的类是低层概念的抽象。低层的变化只影响低层类,高层的变化只影响高层类。 阅读全文

posted @ 2010-01-31 15:26 Todd Wei 阅读(3650) 评论(12) 推荐(7) 编辑

一句话设计模式之Vistor模式
摘要:Vistor模式的目的是将算法和数据结构分离,手段是多分派(multi dispatch)。 阅读全文

posted @ 2010-01-03 12:11 Todd Wei 阅读(620) 评论(0) 推荐(0) 编辑

依赖注入与对象间关系
摘要:1.依赖注入和创建对象辨析;2.对象间4种横向关系;3.依赖注入方式的选择 阅读全文

posted @ 2009-12-10 09:05 Todd Wei 阅读(10753) 评论(61) 推荐(33) 编辑

深一层看Singleton
摘要:“保证对象有唯一的实例,并且提供一个全局访问点”是Singleton模式比较常见的描述。不知您是否意识到,这个定义本身就散发着某种"bad smell"。为什么要把“保证对象有唯一实例”的创建职责,和“提供一个全局访问点”的访问职责混入一个模式呢?B是A的使用者,它只关注A提供的功能接口;A只能有唯一实例是A的创建者的事情,与B无关。 阅读全文

posted @ 2009-10-31 14:53 Todd Wei 阅读(2944) 评论(52) 推荐(8) 编辑

C#动静结合编程之四:泛型委托
摘要:1.多态与继承的区别联系,如何避免“滥用继承”;2.泛型委托 阅读全文

posted @ 2009-07-19 11:08 Todd Wei 阅读(3063) 评论(6) 推荐(6) 编辑

C#动静结合编程之三:Duck Typing
摘要:前面谈到了委托的好处,但可惜的是委托还无法覆盖接口或类的所有功能,有朋友提到“接口是对象功能的抽象,而委托是方法功能的抽象”就是这个意思。那么我们自然会想,有没有一种方式,能将委托的思想应用于对象呢?有!它就是:duck typing。前文已经谈到,duck typing关注“对象能做什么”或者说“如何使用对象”,对象继承自什么类,或者实现什么接口并不重要。 阅读全文

posted @ 2009-03-26 01:23 Todd Wei 阅读(5061) 评论(7) 推荐(1) 编辑

C#动静结合编程之二: 两种哲学
摘要:本文介绍两种OO多态哲学:继承哲学和鸭子哲学。继承哲学关注对象继承结构,即“你继承什么你就是什么”;鸭子哲学关注对象的性质,即“你能做什么你就是什么”。 阅读全文

posted @ 2009-03-16 21:58 Todd Wei 阅读(2641) 评论(15) 推荐(2) 编辑

C#动静结合编程之一: 接口和委托的约束强度
摘要:C#是一门优美且处于快速发展中的语言,它融合了静态和动态的优势,如果运用得当,必能动静结合,呈现出一种和谐之美。本篇是C#动静结合编程的第一篇,希望这个系列能和大家一起探讨如何在C#中最大限度的发挥动静结合的潜能。 阅读全文

posted @ 2009-03-11 12:53 Todd Wei 阅读(3078) 评论(10) 推荐(2) 编辑

一句话设计模式之Strategy模式
摘要:策略模式是分离功能接口和具体实现。 阅读全文

posted @ 2009-02-06 21:56 Todd Wei 阅读(481) 评论(0) 推荐(0) 编辑

一句话设计模式之Factory模式
摘要:工厂模式是对创建对象功能的抽象,特别是解决new和构造函数不能多态的问题。 阅读全文

posted @ 2009-01-20 09:10 Todd Wei 阅读(1231) 评论(2) 推荐(0) 编辑

Framework之外的IoC
摘要:IoC (Inversion of Control)是什么?软件设计大师已经作出了很多定义。这里,我从组件开发的角度来谈什么是IoC-“IoC是一种设计模式,当系统由多个组件 (Component)构成时,它能消除组件间的直接依赖关系,让组件的开发更独立,使用更灵活”。 IoC是Framework的基本特征,但IoC并不专属于Framework设计范畴,它在需要消除组件依赖的地方都能发挥作用。 下面举一个开发实例:需要开发一个计算器组件,实现整数加法运算,计算过程将记录log。 阅读全文

posted @ 2008-09-28 13:14 Todd Wei 阅读(2766) 评论(11) 推荐(0) 编辑