摘要: 共有两类适配器模式:对象适配器模式-- 在这种适配器模式中,适配器容纳一个它包裹的类的实例。在这种情况下,适配器调用被包裹对象的物理实体。类适配器模式-- 这种适配器模式下,适配器继承自已实现的类(一般多重继承)。将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。——Gang of Four客户:需要调用我们的代码的对象。Adapter模式的宗旨:保留现有类所提供的服务,向客户提供接口,以满足客户的期望。(1)类适配器:当客户在接口中定义了他期望的行为时,我们就可以应用适配器模式,提供一个实现该接口的类,并且扩展已有的类,通 阅读全文
posted @ 2013-07-24 21:41 走到天亮 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 什么是门面模式门面模式要求一个子系统的外部与其内部的通信必须通过一个统一的门面(Facade)对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用。就如同医院的接待员一样,门面模式的门面类将客户端与子系统的内部复杂性分隔开,使得客户端只需要与门面对象打交道,而不需要与子系统内部的很多对象打交道。类图:实例: public class FacadeMode { public void test() { new MoudelA().testc(); new MoudelB().testc(); } } p... 阅读全文
posted @ 2013-07-24 15:39 走到天亮 阅读(337) 评论(0) 推荐(0) 编辑
摘要: 抽象工厂模式的优点 抽象工厂模式除了具有工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束。所谓的产品族,一般或多或少的都存在一定的关联,抽象工厂模式就可以在类内部对产品族的关联关系进行定义和描述,而不必专门引入一个新的类来进行管理。抽象工厂模式的缺点 产品族的扩展将是一件十分费力的事情,假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的。适用场景 当需要创建的对象是一系列相互关联或相互依赖的产品族时,便可以使用抽象工厂模式。说的更明白一点,就是一个继承体系中,如果存在着多个等级结构(即存在 着多个抽象 阅读全文
posted @ 2013-07-22 23:08 走到天亮 阅读(277) 评论(0) 推荐(0) 编辑
摘要: 单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。证一个类仅有一个实例,并提供一个访问它的全局访问点。类图:试例: public class Singleton { static Singleton single; private Singleton() { } public static Singleton getSingleton(){ if (single == null) { single = new Sing... 阅读全文
posted @ 2013-07-18 21:07 走到天亮 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 代理(Proxy)模式给某一个对象提供一个代理,并由代理对象控制对原对象的引用。代理模式的英文叫做Proxy或Surrogate,中文都可译成"代理"。所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。类图:实例:代理执行远程方法 public interface IMath { // Methods double Add(double x, double y); double Sub(double x, double y)... 阅读全文
posted @ 2013-07-17 23:36 走到天亮 阅读(337) 评论(0) 推荐(0) 编辑
摘要: 策略模式:策略模式定义了一系列算法,把它们一个个封装起来,并且使它们可相互替换。该模式可使得算法能独立于使用它的客户而变化。通用类图:实例:商品折扣计算 class Program { static void Main(string[] args) { ShopCart sc = new ShopCart(new ProudctA()); sc.doSomthing(); sc = new ShopCart(new ProudctB()); sc.doSomthing();... 阅读全文
posted @ 2013-07-17 21:57 走到天亮 阅读(304) 评论(0) 推荐(0) 编辑
摘要: 在IL中,标号(label)是一个末尾带有冒号(即:)的名称。它使我们能够从代码的一部分无条件地跳转到另一部分。我们经常在由反编译器生成的IL代码中看到这个标号。例如:IL_0000:ldstr "hi"IL_0005:call void [mscorlib]System.Console::WriteLine(class System.String)IL_000a:call void zzz::abc()IL_000f:ret 在冒号前面的词就是标号。在下面给出的程序中,我们在函数abc中创建一个名为a2的标号。指令br用于随时跳转到程序中的任何标号。a.il.assemb 阅读全文
posted @ 2013-07-17 16:32 走到天亮 阅读(915) 评论(0) 推荐(0) 编辑
摘要: 如果你真的想要理解C#代码,那么最好的方法就是通过理解由C#编译器生成的代码。本章和下面两章将关注于此。 我们将用一个短小的C#程序来揭开IL的神秘面纱,并解释由编译器生成的IL代码。这样,我们就可以“一箭双雕”:首先,我们将揭示IL的奥妙,其次,我们将会更加直观地理解C#编程语言。 我们将首先展示一个.cs文件,并随后通过C#编译器以IL编写一个程序。它的输出和cs文件是相同的。输出将会显示IL代码。这会增强我们对C#和IL的理解。好吧,不再啰嗦,这就开始我们的冒险之旅。a.csclasszzz{publicstaticvoidMain(){System.Console.WriteLine( 阅读全文
posted @ 2013-07-17 16:31 走到天亮 阅读(761) 评论(0) 推荐(1) 编辑
摘要: 我们用C#、VB.NET语言编写的代码最终都会被编译成程序集或IL。因此用VB.NET编写的代码可以在C#中修改,随后在COBOL中使用。因此,理解IL是非常有必要的。 一旦熟悉了IL,理解.NET技术就不会有障碍了,因为所有的.NET语言都会编译为IL。IL是一门中性语言。IL是先发明的,随后才有了C#、VB.NET等语言。 我们将在一个短而精辟的程序中展示IL。我们还假设读者至少熟悉一门.NET语言。a.il.methodvoidvijay(){} 随后,我们用IL编写了一个非常短小的IL程序——它显然是不能工作的,并将它命名为a.il。那么我们怎么才能把它编译为一个可执行程序呢?不需要为 阅读全文
posted @ 2013-07-17 16:29 走到天亮 阅读(1856) 评论(0) 推荐(0) 编辑
摘要: 淘宝下单高并发解决方案(转载) 来自http://www.iteye.com/topic/1123010 周末参加了@淘宝技术嘉年华主办的技术沙龙,感觉收获颇丰,非常感谢淘宝人的分享。这里我把淘宝下单高并发解决方案的个人理解分享一下。我不是淘宝技术人员,本文只是写自己的理解,所以肯定是会有一些出入的。 在session中牧劳为我们介绍了淘宝下单部分的技术方案变迁,我不介绍变迁,而只对现有系统做介绍。 要优化下单,提高下单的TPS (Transaction per second),我... 阅读全文
posted @ 2012-08-28 18:35 走到天亮 阅读(471) 评论(0) 推荐(0) 编辑