C#面向对象设计模式纵横谈:Strategy 策略模式
算法与对象的耦合
对象可能经常需要使用多种不同的算法,但是如果变化频繁,会将类型变得脆弱……
动机(Motivation)
在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。如何在运行时根据需要透明地更改对象的算法?将算法与对象本身解耦,从而避免上述
http://www.cyqdata.cn/cnblogs/article-detail-39679
把事件当作对象进行传递
最近在琢磨一些事情,和API设计有关。API设计在很多时候是和语言特性有关的,因此如Java这样的语言,在API设计时会处处受到压抑。而C#就能够出现如Moq或Fluent NHIbernate这样的项目。同样,F#能够开发出FsTest,Scala号称Scalable Language,都是依靠着丰富的语言特性。不过,最近在使用C#的时候鼻子上也碰了一点灰,这是因为我发现“事件&rd
http://www.cyqdata.cn/cnblogs/article-detail-39501
C#面向对象设计模式纵横谈:Prototype 原型模式
依赖关系的倒置
抽象不应该依赖于实现细节,实现细节应该依赖于抽象。-抽象A直接依赖于实现细节b(软件易脆,很容易需要重新编译)
-抽象A依赖于抽象B,实现细节b依赖于抽象B
动机(Motivation)
在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。如何应对这
http://www.cyqdata.cn/cnblogs/article-detail-39409
面向对象的三个基本概念
封装
封装(Encapsulation ) 是将代码及其处理的数据绑定在一起的一种编程机制,该机制保证了程序和数据都不受外部干扰且不被误用。理解封装性的一个方法就是把它想成一个黑匣子,它可 以阻止在外部定义的代码随意访问内部代码和数据。对黑匣子内代码和数据的访问通过一个适当定义的接口严格控制。如果想与现实生活中的某个事物作对比,可考&n
http://www.cyqdata.cn/cnblogs/article-detail-39354
前端要给力之:分解对象构造过程new()
本文讨论JavaScript中的对象创建运算new。需要说明的是,本文所讨论的“将new()过程分解为多个步骤”,并非一般js开发中的所须技巧,而是在js来构建OOP系统的必要技术。
一、JavaScript构造器与构造过程的特点
JavaScript中通过以下方式声明和使用构造器:
function MyObject() { this.xxx = 1; }
http://www.cyqdata.cn/cnblogs/article-detail-39167
C#面向对象设计模式纵横谈:Decorator 装饰模式
子类复子类,子类何其多
假如我们需要为游戏中开发一种坦克,除了各种不同的型号的坦克外,我们还希望在不同场合中为其增加以下一种或多种功能:比如红外线夜视功能,比如水陆两栖功能,比如卫星定位功能等等。
如果再添加一种功能D,那么需要增加的T50子类的数量可想而知,而这只是T50这个类型,如果还有其他T70等类型,那么需要新添加的子类将不可计数。
动机(Motivation)
上述描
http://www.cyqdata.cn/cnblogs/article-detail-39164
读jQuery之一(对象的组成)
首次接触jQuery.js是在2008年,上地的一家小公司。当时的版本是1.1,在此之前我仅接触过Prototype.js。对于jQuery的写法甚是困惑,尤其在使用Prototype的$后,一度不能理解jQuery的$。对于现在前端同学来说,可能第一个接触的就是jQuery了,他们会觉得很习惯,很自然。
至今电脑里还存放着当时的API文档,发个图感叹下
在这段时间内,我的入门老师是墨墨,其
http://www.cyqdata.cn/cnblogs/article-detail-38999
第二章:C#.NET面向对象—— 命名空间、编译单元和程序集
C#通过名字空间(namespace)来组织程序中的各种类型,程序集是这些类型的物理容器,它包含具体的实现代码。所有的C#都具备名字空间,而且都具有一个全局名字空间。
除名字名字外,C#中还有很多种声明空间,如类型声明空间,语句声明空间等。
<一> 自定义名字空间
通过关键字namespace来
http://www.cyqdata.cn/cnblogs/article-detail-38903
WCF从理论到实践(9):实例模式和对象生命周期
本系列文章导航WCF从理论到实践(1):揭开神秘面纱WCF从理论到实践(2):决战紫禁之巅WCF从理论到实践(3):八号当铺之黑色契约WCF从理论到实践(4):路在何方WCF从理论到实践(5):Binding细解WCF从理论到实践(6):WCF架构WCF从理论到实践(7):消息交换模式WCF从理论到实践(8):事件广播WCF从理论到实践(9):实例模式和对象生命周期WCF从理论到实践(10):异常
http://www.cyqdata.cn/cnblogs/article-detail-38698
第二章:C#.NET面向对象——继承、多态与接口3(接口)
<三> 接口
(1)接口概述
接口(interface)是用来定义程序的一种协定。实现接口的类或者结构要与接口的定义严格一致。有了这个协定,就可以抛开编程语言的限制(理论上如此)。接口可以从多个基接口继承,而类或结构可以实现多个接口。接口可以包含方法、属性、事件和索引器。接口本身不提供它所定义的成员的实现,接口只指定实现该接口的类或接口必须提供的成员。
&nbs
http://www.cyqdata.cn/cnblogs/article-detail-38676
C#面向对象设计模式纵横谈:Iterator 迭代器模式
集合内部结构与外部访问
动机(Motivation)
在软件构建过程中,集合对象内部结构常常变化各异。但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素;同时这种“透明遍历”也为“同一种算法在多种集合对象上进行操作”提供了可能。
使用面向对象技术将这种遍历机制抽象为“迭代器对象&
http://www.cyqdata.cn/cnblogs/article-detail-38638
《.NET4.0 面向对象编程漫谈》读书笔记 ——第11章 对象集合与LINQ
第11章 对象集合与LINQ
【摘要】:LINQ是.NET的一项重大创新,它可以非常方便地查询对象集合。本章主要讲述LINQ技术中最基础的部分--LINQ to Objects。
第1节 针对对象集合的标准查询
1、 对象筛选:
A、 筛选指从某对象集合中选出满足条件的对象,通用Where扩展方法实现。
B、 方法声明:
Public static IEnumerabl
http://www.cyqdata.cn/cnblogs/article-detail-38634
第二章:C#.NET面向对象——继承、多态与接口2(多态)
<二> 多态
面向对象程序设计中的另一个重要概念是多态性。在运行时,可以通过指向基类的指针来调用实现派生类中的方法。可以把一组对象放到一个数组中,然后调用它们的方法,在这种场合下,多态性的作用就体现出来了,这些对象不必是相同的对象。当然,如果它们都继承自某个类,可以把这些类都放到一个数组中。如果这些对象都有同名方法,就可以调用每个对象的同名方法。
http://www.cyqdata.cn/cnblogs/article-detail-38514
XML与DataSet对象的关系
在.NET Framework 中,经常使用XML 作为存储和传输各种数据的格式。DataSet 中的数据可以转换成XML 的形式来表示和存储。我们可以使用XML 对象同步和转换DataSet 的数据,而DataSet 也可以存储和传输XML 格式的数据。
XML 与 DataSet 的关系如下图所示:
DataSet 对象的常用方法如下:
A. 使用ReadXml(
http://www.cyqdata.cn/cnblogs/article-detail-38418
VS2010测试功能之旅:编码的UI测试(3)-操作对象的识别原理
回顾
在之前的两章分别介绍了一个简单的示例, 操作动作的录制原理,通过修改UIMap.UItest文件控制操作动作代码的生成。想必大家对编码的UI测试操作动作的录制应该有一定了解了,在UI操作中,操作动作总是离不开具体的操作对象,例如点击,拖动,填写值等操作,总是要对文本框,或者按钮,窗体这些对象进行操作,不是凭空生成的。本章作为入门篇的最后一章,将会说明编码的UI测试是
http://www.cyqdata.cn/cnblogs/article-detail-38353
《.NET4.0 面向对象编程漫谈》读书笔记 ——第14章 对象间的协作与信息交换
第14章 对象间的协作与信息交换
【简介】:面向对象的程序 = 对象 + 对象之间的相互协作关系。在任何一个面向对象程序开发过程中,设计好对象之间的协作关系与信息交换方式都属于开发的核心任务,本章主要介绍了“一对一”对象之间、“一对多”对象之间的相互协作与信息交换的基本方式等。
第1节 对象间信息交换的基本方式
1、 对象协作
http://www.cyqdata.cn/cnblogs/article-detail-38181
《.NET4.0 面向对象编程漫谈》读书笔记 ——第13章 对象的复制与序列化
第13章 对象的复制与序列化
【简介】:序列化技术是学习分布式软件系统开发技术(如WCF)的前提之一,本章主要介绍对象的浅复制与深复制、对象的序列化、对象序列化应用等。
第一节 对象的浅复制与深复制
1、 浅复制:是指当对象的字段值被复制时,字段引用的对象不会被复制。
例如,如果一个对象有一个指向字符串的字段,并且我们对该对象做了一个浅复制,那麽两个对象将引用同一个字符串
http://www.cyqdata.cn/cnblogs/article-detail-38088
面向对象编程已死?
本文是从 Object Oriented Programming is Dead 这篇文章翻译而来。
那好吧,也许是没死,但卡内基.梅隆大学的Robert Harper教授却说(Teaching FP to freshmen)面向对象编程和设计“不适合做为现代计算机科学教学课程”,详细的内容引用如下:
“面向对象编程应该完全的从基础课程中删除掉,因为它既
http://www.cyqdata.cn/cnblogs/article-detail-38067
面向对象的分析与设计
引言
我们首先介绍一些名词翻译: Object-Oriented Analysis and Design---面向对象分析和设计 Assignning Responsibilities---分配职责 Iterative Development and the Unified Process---迭代开发和统一的过程 Embracing Change---拥抱变化 Feedback a
http://www.cyqdata.cn/cnblogs/article-detail-38035
《.NET4.0 面向对象编程漫谈》读书笔记 ——第10章 异步编程模式
第10章 异步编程模式
【摘要】:异步编程充分利用多线程技术带来的好处,而不需要程序员了解多线程开发中的复杂细节。本章讲述了基于IAsyncResult的异步模式、基于事件的异步模式。
第1节 程序的同步执行和异步执行
1、同步概念:若在代码中调用了一个方法,需要等待此方法所有的代码执行完毕之后,才能回到原来的地方执行下一行代码,这种程序运行方式称
http://www.cyqdata.cn/cnblogs/article-detail-37988