摘要: 1.默认情况下,C#假定所有的方法参数传递都是传值的。 如下面的方法: public static void Main(string[] args) { int val = 5; //调用AddValue方法,aVal会重新拷贝一份val的值(即aVal为val的一个实例副本),方法内部的操作并不会改变val的值。 AddValue(val); //val值还是5,... 阅读全文
posted @ 2013-12-07 20:37 liaozh 阅读(284) 评论(0) 推荐(0) 编辑
摘要: 1.类型的可访问性 a.关键字有public、internal,其中public表示该类型对于程序集都可见、internal表示该类型仅对当前程序集可见。此处的类型可以为类、接口、结构等。 b.如果不显式指定类型的访问行,internal为类型的默认值。 c.友元程序集 应用场景:公司的TeamA在程序集中定义了一组工具类型(UtilityType),可访问性为internal,公司的Tea... 阅读全文
posted @ 2013-12-04 22:17 liaozh 阅读(834) 评论(0) 推荐(0) 编辑
摘要: 应用场景:领导都有秘书,一般会代理领导的部分职能角色,处理签字、报销、开会等任务。很多新人可能都只知道秘书的存在,毕竟每天与其打交道,不知道领导的存在。但是领导的的确确是真实存在的。场景说明:代理模式就是创建一个代理对象(秘书),用这个代理对象去代表真实对象。客户端得到这个对象以后,跟得到真实对象一样来使用。当客户端操作代理对象时,实际上功能最终还是会由真实的对象来完成,只不过通过代理来操作而已。最终表现为,客户端操作代理,代理操作真实对象,对应上面的,员工都找秘书办事,秘书统一向领导汇报。代理对象加载客户端和被代理的对象中间,我们就可以有一些变通,比如说,秘书会对所有事务筛选下,如果事情比较 阅读全文
posted @ 2013-11-14 21:59 liaozh 阅读(329) 评论(0) 推荐(0) 编辑
摘要: 场景分析:众所周知,电脑有很多组成部分,如硬盘、内存、光驱、音频、键盘等,各个组件之间协同工作才能保证电脑的正常运行。如果各个组件之间直接交互,可能会比较复杂,如下图:将上面的各个组件抽象成类,显然,类之间交互过多,违反了软件工程中松耦合的思想。试想按照这么设计,如果电脑后面新增一个功能或者修改一个功能,改动难度将会极大。实际上,在电脑设计中,考虑到上面的因素,使用了主板来解决这个问题。主板本身作为一个中介者,内部包含各个组件之间的协调功能。使用了主板角色以后,上面的图就变成了这样。中介者模式的组成部分:a. Colleagueclass,一般称为同事类,即上面的电脑组件,如硬盘、内存、光驱、 阅读全文
posted @ 2013-11-11 20:34 liaozh 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 场景分析:前面我们提到,交易对象Trade,还有继承他的债券交易BondTrade、期货交易FutureTrade。现在有一个需求,需要提供方法将交易拆分成多笔小交易。代码如下(如果没有clone方法):/// /// 拆分交易/// /// 原始交易/// 拆分的笔数public static List SplitTrade(Trade aTrade, int aSplitCount){ List tmpTrades = new List(); if (aTrade == null) { return null; } if (aSplitCount... 阅读全文
posted @ 2013-11-07 22:00 liaozh 阅读(543) 评论(0) 推荐(0) 编辑
摘要: 简介:适配器模式在我看来是最无聊的一种模式,因为他根本不是一种新的创意模式,而是一种不得已而为之的模式。就算不学适配器模式,在具体应用场景中也会自然而然的想到这种解决方案。张三在英国留学时买了个笔记本,使用的外接电源为欧式标准。现在回国了(中国电源标准不同意欧洲标准),要想让笔记本继续正常工作,有两种方案,1为重新改造笔记本,2为买个电源转换器,将欧式电源转换为中式电源。上面中的1,重新改造笔记本,相当于我们软件工程中的代码重构,难度大,风险高。2即为本文中所描述的适配器模式,只需要稍微修改外部调用接口,内部实现逻辑不用改变。适配器模式的定义:将一个类的接口转换为客户希望的另外一个接口。适配器 阅读全文
posted @ 2013-11-05 17:55 liaozh 阅读(294) 评论(0) 推荐(0) 编辑
摘要: 简介外观模式(Facade),将外部与内部子系统的通信通过一个统一的门面对象进行。由两部分组成:门面角色:供外部调用,内部可能组装了多个子系统,多个方法。子系统角色:子系统的方法也可以直接供外部调用。一般来说,将常用的方法放在门面角色里面调用,门面角色对其来说相当于一个客户端而已。具体实例交易的保存,交易的保存涉及到交易本身数据库表的保存、余额的调整、交易修改备案的记录等操作。相关子类的代码为:/// /// 交易保存类--子系统1/// class TradeManager{ public void SaveTrade(Trade aTrade) { Console... 阅读全文
posted @ 2013-10-30 16:53 liaozh 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 简介:观察者模式,也称为订阅-发布模式,定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖他的对象都得到通知并被自动更新。主要由以下几个部分组成:a.Subject目标对象。它具有以下特征: 一个目标可以被多个观察者订阅 提供订阅和取消订阅的方法 当目标对象状态发生变化时,通知所有订阅者。把Subject独立出来是因为他提供了观察者模式中常见的三个特征,每个观察者模式都是这样,可以抽象出来。具体的单独逻辑可放在ConcreteSubject具体的目标实现对象中。b.Observer定义观察者的接口。提供方法(一般为接口),当目标对象发生变化通知过来,做对应的响应操作。可以在 阅读全文
posted @ 2013-10-24 21:51 liaozh 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 简介: 简单工厂模式将类的示例化放在工厂对象中。 工厂方法模式是简单工厂模式的延伸,不同的是其将子类的实例化延迟到子类工厂中实现,本身仅定义一个创建对象的接口。 工厂方法模式主要由四部分组成: 1.抽象产品(product) -同简单工厂模式 是所有具体产品角色的父类,它负责描述所有实例所共有的公共接口,抽象类或者接口 2.具体产品(Concrete Product) -同简单工厂模式即为Pr... 阅读全文
posted @ 2013-10-22 21:36 liaozh 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 模式说明:保证每一个类仅有一个实例,并提供一个访问它的全局访问点(即自行实例化并向整个系统提供这个实例)。应用场景:1.如配置文件取值类AppConfig(本身实例化对象比较大,且没有必要实例化多个)每一个AppConfig实例对象都封装着配置文件的内容,如果系统中有多个AppConfig实例对象,系统中就会同时存在多份配置文件的内容,这样会严重浪费内存资源。如果配置文件内容比较多,多个实例对于系统资源的浪费就会更大。事实上,对于AppConfig这种类,在运行期间,一个实例对象就足够了。2.如交易匹配类TradeMatchCore(单个类中需要共享成员变量,多个实例无法做到)交易匹配类Tra 阅读全文
posted @ 2013-10-16 20:04 liaozh 阅读(232) 评论(0) 推荐(0) 编辑