存档

文章标签 ‘OOP’

Daniel-Journey Weekly Dose –2011/12/31

2011年12月31日 admin 1 条评论

Scalability

CAP理论及BASE思想等

OOP

静态类的原罪

Java

各种java序列化工具性能对比

 

LINUX

linux 统计目录下的文件数量

第一种方法: ls -l|grep "^-"|wc -l ls -l 长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录、链接、设备文件等)。

第二种方法: ls -lR|grep "^-"|wc -l

linux du 显示路径下各子目录大小

du -h –max-depth=1 /backup/

 

通过IOStat命令监控IO性能

  • rrqm/s:队列中每秒钟合并的读请求数量
  • wrqm/s:队列中每秒钟合并的写请求数量
  • r/s:每秒钟完成的读请求数量
  • w/s:每秒钟完成的写请求数量
  • rsec/s:每秒钟读取的扇区数量
  • wsec/s:每秒钟写入的扇区数量
  • avgrq-sz:平均请求扇区的大小
  • avgqu-sz:平均请求队列的长度 。毫无疑问,队列长度越短越好。
  • await:平均每次请求的等待时间。await是平均每次请求的等待时间。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。
  • svctm:平均每次请求的服务时间。从源代码里可以看出:(r/s+w/s)*(svctm/1000)=util。举例子:如果util达到100%,那么此时svctm=1000/(r/s+w/s),假设IOPS是1000,那么svctm大概在1毫秒左右,如果长时间大于这个数值,说明系统出了问题。
  • util:设备的利用率。如果它接近100%,通常说明设备能力趋于饱和(并不绝对)。有时候会出现大于100%的情况,这是因为读取数据的时候是非原子操作。
分类: 阅读 标签: , , ,

Daniel-Journey Weekly Dose –2011/11/19

2011年11月20日 admin 没有评论

投资

【股民必看炒股口诀】1、下降通道只能瞧, 价量齐跌不能要。空头均线难走好, 长期盘整等它翘。2、密集成交不太妙, 主力抛压退为好。看法一致壁上瞧, 市场冷门没人要。3、股评力荐利润少, 走势怪异远离跑。基本面上选股票 , 学会简直不得了。4、日常生活是学校, 前人经验不可少。

营销

网络营销sem十五种模式大PK

『B2C电商平台的邮件营销策略』对比各种网络营销手段,邮件营销获取新用户的成本相对较低,像淘宝获取一个新购买用户的成本为30元,卓越或当当网的成本约为80元。凡客通过邮件营销获得的收入占总收入的20%,走秀网是19%左右,而做邮件营销要解决三件事情:邮件发送渠道、邮箱数据来源和邮件内容策略。

Java

深入分析Java I-O的工作机制

OOP

Proxy模式与Decorator模式的区别

Java Decorator Pattern Example

LINUX

Linux如何测试Inode使用情况

使用df -i命令可以看到每个分区的总inode数目和被使用的以及空闲的inode数目

find ~ -name "*.log" | xargs -L rm

注意不能直接通过rm命令删除,因为rm命令是将被删除的文件作为一个又一个参数传递进来的,当被删除的文件过多时,容易导致出现参数过长的错误提示:arg list too long

让你提升命令行效率的 Bash 快捷键 [完整版]

  • Ctrl + a :移到命令行首
  • Ctrl + e :移到命令行尾
  • Ctrl + f :按字符前移(右向)
  • Ctrl + b :按字符后移(左向)
  • Alt + f :按单词前移(右向)
  • Alt + b :按单词后移(左向)
  • Ctrl + xx:在命令行首和光标之间移动
  • Ctrl + u :从光标处删除至命令行首
  • Ctrl + k :从光标处删除至命令行尾
  • Ctrl + w :从光标处删除至字首
  • Alt + d :从光标处删除至字尾
  • Ctrl + d :删除光标处的字符
  • Ctrl + h :删除光标前的字符
  • Ctrl + y :粘贴至光标后
  • Alt + c :从光标处更改为首字母大写的单词
  • Alt + u :从光标处更改为全部大写的单词
  • Alt + l :从光标处更改为全部小写的单词
  • Ctrl + t :交换光标处和之前的字符
  • Alt + t :交换光标处和之前的单词
  • Alt + Backspace:与 Ctrl + w 相同类似,分隔符有些差别 [感谢 rezilla 指正]

 

网络

TCP/IP Protocol Fundamentals Explained with a Diagram

7 Linux Grep OR, Grep AND, Grep NOT Operator Examples

操作系统

我理解的进程和线程的区别

分类: 阅读 标签: , , , , , ,

转载:极速理解设计模式系列【目录索引】

2011年10月31日 admin 2 条评论
分类: 设计模式 标签:

理解:组合VS继承

2010年11月7日 admin 没有评论

什么是继承

面向对象编程 (OOP) 语言的一个主要特性就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。通过继承创建的新类称为“子类”或“派生类”。被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。在某些 OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。

继承概念的实现方式有三类:实现继承、接口继承和可视继承。

  1. 实现继承是指使用基类的属性和方法而无需额外编码的能力;
  2. 接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;
  3. 可视继承是指子窗体(类)使用基窗体(类)的外观和实现代码的能力。 在考虑使用继承时,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。例如,Employee 是一个人,Manager 也是一个人,因此这两个类都可以继承 Person 类。但是 Leg 类却不能继承 Person 类,因为腿并不是一个人。

什么是组合

通过创建一个由其他对象组合的对象来获得新功能的重用方法,新功能的获得是通过调用组合对象的功能实现的,有时又叫聚合。

组合&继承优缺点比较

  组合 继承
优点 1. 被包含对象通过包含他们的类来访问
2. 黑盒重用,因为被包含对象的内部细节是不可见的
3. 很好的封装
4. 每个类专注于一个任务
5. 通过获得和被包含对象的类型相同的对象引用,可以在运行时动态定义组合的方式
1.新的实现很容易,因为大部分是继承而来的
2.很容易修改和扩展已有的实现
缺点 1.结果系统可能会包含更多的对象
2.为了使组合时可以使用不同的对象,必须小心的定义接口
1.打破了封装,因为基类向子类暴露了实现细节
2.白盒重用,因为基类的内部细节通常对子类是可见的
3.当父类的实现改变时可能要相应的对子类做出改变
4.不能在运行时改变由父类继承来的实现

由此可见,组合比继承具有更大的灵活性和更稳定的结构,一般情况下应该优先考虑组合。只有当下列条件满足时才考虑使用继承:

  • 子类是一种特殊的类型,而不只是父类的一个角色
  • 子类的实例不需要变成另一个类的对象
  • 子类扩展,而不是覆盖或者使父类的功能失效
  • 组合关系和继承关系相比,前者的最主要优势是不会破坏封装,在软件开发阶段,组合关系虽然不会比继承关系减少编码量,但是到了软件维护阶段,由于组合关系使系统具有较好的松耦合性,因此使得系统更加容易维护。组合关系的缺点是比继承关系要创建更多的对象。从软件构架来说,组合,耦合度比继承弱,继承是对父类方法和数据成员的兼收并蓄,而组合,可以有选择得使用某一种方法。

      Effective Java中对这个问题的说明

    继承(指的是子类扩展超类,并不包含接口)是实现代码重用的有力手段,但它并不总是完成这项工作的最佳工具。不适当地使用继承会导致脆弱。与方法调用不同的是,继承打破了封装性。换句话说子类依赖于超类中特定功能的实现细节。超类的实现可能随着发行版本而变化,就有可能影响子类。因此,子类必须要跟着超类的更新而发展。除非超类是专门为扩展而设计的,并且具有很好的说明文档。

Erich Gamma对“组合优先于类继承”的理解

在GoF的书中提到一个很重要的面向对象设计理论:“对象合成(composition)优先于类继(inheritance)。”Erich Gamma认为,继承也用它的脆弱性,因为当子类继承的方法被调用时,它很容易就能知道(父类与子类)之间的联系。父类与子类之间存在一个很强的耦合性,由于这种耦合性使得我在子类中加入的代码会被访问到。而合成具有更好的特性,通过建立一些用于插入大尺度对象中的小尺度对象,然后由大尺度的对象来调用小尺度对象就可以降低耦合性。

 

参考

Java程序设计之-复合优先于继承

组合与继承

分类: 软件设计 标签:

Daneil-Journey Weekly Dose-2010/10/3

2010年10月10日 admin 没有评论

Scalability

多IDC的数据分布设计(一)

多IDC的数据分布设计(二)

CAP原理与最终一致性

OO & Design Pattern

视角的力量–再说OO设计原则

Martin Fowler在他的著作 《UML Distilled》中提到了三层视角(perspective):概念视角,规约视角,实现视角。

使用三种视角看软件开发,我们可以得到这样的描述:

概念视角:呈现所研究领域中的各种概念,得出概念模型的时候应该尽量少德或者不考虑它的实现,这个视角要回答的问题是:软件要负责什么?是策略性的结论

规约视角:我们现在考虑的是软件,但是我们关注的是软件的接口而不是实现。规约视角要回答的问题是:怎么使用软件?这个层次关注的是软件各部分的交流。

实现:这时我们考虑的是代码本身但是许多方面我们使用规约视角可能会更好,软件在规约层交流在实现层执行。

视角帮助我们将问题划分层次,隔离

从上面的描述我们很明显得看到“软件开发”所设计牵扯的问题已经被划分到三个不同的层次,在每一个层次我们都要有特定的思考成果。在高层没有思考成熟的时候我们不往下一个层次进行,按照这样一个原则,细节被隔离在思维的围墙之外。

Active Object 并发模式在 Java 中的应用

Architecture

如何做好软件系统的架构设计?

Tomcat 系统架构与设计模式,第 1 部分: 工作原理

Tomcat 系统架构与设计模式,第 2 部分: 设计模式分析

Java

Installing Multiple Eclipse Plugins with Ease

NOSQL

MapReduce: 一个巨大的倒退

Algorithm

拜占庭将军问题

拜占庭假设是对现实世界的模型化,由于硬件错误、网络拥塞或断开以及遭到恶意攻击,计算机和网络可能出现不可预料的行为。拜占庭容错协议必须处理这些失效,并且这S些协议还要满足所要解决的问题要求的规范。这些算法通常以其弹性t作为特征,t表示算法可以应付的错误进程数。 很多经典算法问题只有在t<n/3是才有解,如拜占庭将军问题,其中n是系统中进程的总数

如果要想容忍m个判国者,必须保证总的将军的个数大于3m。

产品

新浪内部对腾讯公司的深度解析.pdf

学习腾讯的产品管理之道

其他

如何让PPT的备注演示者看到而观众看不到

Daniel-Journey Weekly Dose-2010/8/27

2010年8月29日 admin 3 条评论

面向对象

面向对象的三个基本特征

Architecuture

Lean Architecture Principles

敏捷

软件从敏捷到超精益开发的十个步骤

1.选择商品化的技术
2.关注技术风险和市场风险
3.选择没有技术风险的想法
4.累积技术债务,快速将产品推向市场
5.仅当被黑了才重视安全
6.忘掉可扩展性
7.对好的想法说 “不”
8.没有笨重的语言
9.速度高于质量
10.用户体验高于用户界面

其他

著名编程语录

抽象化是一种非常的不同于模糊化的东西 … 抽象的目的并不是为了模糊,而是为了创造出一种能让我们做到百分百精确的新语义。

除数学外,对本土语言的异常的精通会是一个计算机程序员的最宝贵的财富。

程序应该是写给其他人读的,让机器来运行它只是一个附带功能。

性能的关键是精简,而不是一堆的优化用例。除非有真正显著的效果,否则一定要忍住你那些蠢蠢欲动的小微调的企图。

原型的价值就在于它对你的教育,而不是代码本身。

Caffeine+Nicotine 尼古丁+咖啡 不瞌睡的Ppt制作秘诀

蔡学镛:架构师最重视的文档

分类: 阅读 标签: , ,

面向对象语言VS 面向过程语言学习摘要

2010年5月1日 admin 2 条评论

今天早上打算学习一些面向对象语言的基本原理,也不打算找一本著作仔细阅读了,就从网络上搜索一些有用的信息,做个记录。

过程语言VS面向对象语言VS通用式编程

过程语言是使问题与语言相适应,他关注的是数据和算法,他一般使用自上而下的设计方式,即把一个未知的大问题分解成一个一个可解或容易求解的子问题,然后最终把问题解决。

面向对象语言是使语言与问题相适应,他关注的是类,即如何描述问题域中的对象,他一般使用的是自下而上的设计方式,即先为问题域中的每个对象建立用于描述这些对象的类,然后通过类之间的交互描述整个问题。

通用式编程,或者称为模板编程,他强调的是算法方面,他提出一种通用的,与数据类型无关的算法结构。

——感觉说的有点问题?

 

过程式语言与面向对象语言的区别

过程式语言与面向对象语言,到底有什么区别?可能是初学者常碰到的问题。简单来说,过程式语言整个是构建在动词上的语言。比如,最常见的经典过程式语言- C语言,打印一条语句的语法是printf(), 这个方法的名字本身就是一个动词,这个动词强调了一个动作的过程,所谓过程式就是这个意思。

同样的方法在面向对象的JAVA中就是这样写:System.out.println();  前面说过面向对象语言就是构建在名词基础上的系统,对象就是一个名词。大家都知道对象封装了操作和属性,所以System是一个对象,后面跟上分类在 out目录下的方法println。 这就是面向对象的写法。

谈谈面向对象的编程语言和面向过程编程语言的不同

总体而言,面向对象简单,面向过程对人员要求素质过高 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

艾兰.库伯的《软件创新之路》中提到: 面向过程和面向对象的区别并不像人们想象得那么大 面向对象的大部分思想在面向过程中也能体现 但面向过程最大的问题(也许是唯一先天的缺陷)在于随着系统的膨胀,面向过程将无法应付,最终导致系统的崩溃 面向对象的提出正是试图解决这一软件危机 目前看来,似乎有一定成效 但仍任重道远。

其实我始终认为,不管是面向对象,还是面向过程,都体现了一种软件重用的思想! 只不过面向过程中重用的是过程和函数,但是面向对象重用的是类,一种将数据和处理数据的过程及函数封装在一起的实体,其实面向对象中的过程和函数和面向过程中的分别不是很大,所以数据流图和伪代码还是有用的。 面向对象一个很大的好处就是数据 和方法的封装,由此面向对象的三大特性得到发挥

分类: 软件设计 标签:

Daniel-Journey Weekly Dose-2010/4/11

2010年4月11日 admin 3 条评论

Architecture & Design

Mediator Pattern applied to Javascript

The diagram below is a general representation of the interaction between a mediator and colleagues. Each colleague stores a reference to the mediator and the mediator stores a reference to each colleague. Colleagues are unaware of each other and messages are broadcast through the mediator.

image

Two of the benefits of using the Mediator pattern are that that it decouples colleagues and simplifies object interaction. Instead of using the Observer pattern to explicitly set many-to-many listeners and events, Mediator allows you to broadcast events globally across colleagues. The biggest drawback of using Mediator pattern is that due to the centralized control, the mediator can become difficult to manage.

向对象开发与面向组件开发的区别
养成面向组件编程(COP)的习惯
面向组件还是面向对象

既然类和组件有着这么多类似的地方,那么传统的面向对象编程和面向组件编程有什么区别呢?简单的说,面向对象关注的是组合在一个二进制可执行文件中的各个类的关系,而面向组件的编程关注的是在彼此独立的基础上模块之间的交互性,这种交互性使得你并不需要熟悉它们内部的工作原理。

面向对象与面向组件小议

面向对象技术的基础是封装--接口与实现分离,面向对象的核心是多态--这是接口和实现分离的更高级升华,使得在运行时可以动态根据条件来选择隐藏在接口后面的实现,面向对象的表现形式是类和继承。面向对象的主要目标是使系统对象化,良好的对象化的结果,就是系统的各部分更加清晰化,耦合度大大降低。 

组件技术的主要目标是复用--粗粒度的复用,这不是类的复用,而是组件的复用,如一个dll、一个中间件,甚至一个框架。一个组件可以有一个类或多个类及其它元素(枚举、)组成,但是组件有个很明oo显的特征,就是它是一个独立的物理单元,经常以非源码的形式(如二进制,IL)存在。一个完整的组件中一般有一个主类,而其它的类和元素都是为了支持该主类的功能实现而存在的。

最后强调一点,组件的目标是粗粒度的复用,组件的核心是接口。

用Qi4j进行面向组合编程

Java

SortedMap JavaDoc

Database and SQL

Efficient Pagination Using MySQL

高效的MySQL分页

SOA

服务和耦合的真正意义

基于设计的组件:首先:SOA和基于设计的组件不一样。在一个SOA架构中的服务是分布式的。而基于设计的组件中的这些组件是代码片段,通过他们所处每个系统来打包这些片段。从这种意义上来讲,EJB 能够作为服务和组件。

基于重用的组件通常比基于重用的服务简单。在服务重用时,在重用组件中变更带来的影响更是难以控制。其中可能有使用我的服务以及我没有关注的系统。在组件中,也许也是这种情况,但每个系统不得不有意识的做决定来升级组件,所以在一个系统中任何意外的破坏都与系统中那个早期的变更有关系。

耦合:这是“耦合”的真正意义。如果一个系统的改变很可能需要另一个系统的改变,那这两个系统是紧耦合的。这是一个很难通过观察代码来衡量的标准,然而很多人相信可以用代码的度量来理解耦合。

其他

一个老程序员的感悟:做技术二十多年,突然明白的道理

Daniel-Journey Weekly Dose-2010/4/4

2010年4月4日 admin 没有评论

Java

ThreadLocal是什么

深入探讨在集群环境中使用 EhCache 缓存系统

WEB

加速Javascript:DOM操作优化

Linux

Linux内存模型

文件默认权限:umask

查看方式有两种,一种是直接输入umask,可以看到数字类型的权限设置分数,一种是加入 -S(Symbolic)参数,就会以符号类型的方式显示权限。

在默认权限的属性上,目录与文件是不一样的。由于我们不希望文件具有可执行的权力,默认情况中,文件是没有可执行(x)权限的。因此:
• 若用户建立为”文件”则默认“没有可执行(x)项目”,即只有rw这两个项目,也就是最大为666分,默认属性如下:
-rw-rw-rw-
• 若用户建立为”目录”,则由于x与是否可以进入此目录有关,因此默认为所有权限均开放,即为777分,默认属性如下:

umask指定的是“该默认值需要减掉的权限”。因为r、w、x分别是4、2、1,所以。也就是说,当要去掉能写的权限,就是输入2,而如果要去掉能读的权限,也就是4,那么要去掉读与写的权限,也就是6,

Architecture & Design

IOU 设计模式介绍及应用

IOU 思想是人们在处理日常债务关系时行之有效的一种方法,即:

  • 债务人通过可靠的第三方保管账户,向债权人发放 IOU 债务凭证;
  • 债务人通过向第三方保管账户提交结果以终止 IOU 债务;
  • 债权人凭此 IOU 债务凭证通过第三方保管账户履行债权并进行结果赎回。

债务人和债权人之间的债务关系,通过可靠的第三方保管账户,实现了在时间和空间上最大程度的分离和解耦。

IOU 设计模式是 IOU 思想在软件设计领域的应用,最早由 Allan Vermeulen 于 1996 年首次提出。在软件设计领域,债务关系发生在方法调用者和方法体之间,债务对象就是方法的返回结果。普通方法的调用模型是方法体同步执行然后返回结果,调用者必须等待结果返回后才能继续执行。在 IOU 设计模式下,方法体将立即返回一个 IOU 对象,并且承诺 IOU 对象最终一定会被终止,调用者在 IOU 对象被终止后可进行结果的赎回。在此期间,调用者无需等待就能够继续进行其它有价值的事务,从而达到了提高程序整体的并发性和异步性的目的。

IOU 设计模式完全不依赖于任何一种异步机制,IOU 对象的提供者可以选择任意有效的方式来执行服务并最终终止 IOU 对象,比如启用独立的线程/进程执行、驱动异步事件产生、通过远程方法调用或是等待用户终端输入等等。这是 IOU 模式具备普遍适用性的一个重要因素。

Q1技术回顾

SOA

Services vs. Applications

Services Applications
Perform a single or a few specialized operations. Perform a wide range of operations, and may even expose some of these operations as services.
Most often accessed by other programs. Often (but not always) accessed by humans.
Often (but not always) targets part of a larger problem domain. Often (but not always) targets a whole problem domain.
分类: 阅读 标签: , , , ,

Daniel-Journey Daily Dose-2010/2/18

2010年2月18日 admin 没有评论

敏捷

敏捷估计和规划的12条指导原则

  • 让整个小组参与。
  • 在不同层次上进行规划。
  • 使用不同度量单位,让对规模和持续时间的估计保持独立。
  • 用功能或者日期来体现不确定性。
  • 经常重规划。
  • 跟踪进度并沟通
  • 承认学习的重要性。
  • 规划具有适当规模的功能。
  • 确定功能优先级。
  • 把估计和计划建立在事实上
  • 保留一些松弛度。
  • 通过前瞻规划协调做个小组。

Bob大叔关于Scrum和敏捷的7条缺陷

  • 缺乏技术实践:Scrum是一个项目管理框架,在技术方面没给任何建议。Bob建议团队“需要从其他诸如XP的方法中借鉴技术实践。这套技术实践可能包括:TDD、持续集成、验收测试、结对编程、重构。”
  • 30天的冲刺周期太长:多数讲师现在建议冲刺周期1-2周,大多数团队采用的是2周。
  • Scrum教练有时变成了项目经理:有些Scrum教练把Scrum当作微管理和控制的一种形式。“这不是Scrum固有的问题,而是Scrum发展中遇到的问题。或者这要怪‘master’这个单词了。”
  • 对产品Backlog的指导太少:“经过多年实践,我们知道了backlogs有很多分层次的实体,包括史诗、主题、故事等等。我们学会了怎么对它们估计;学会了怎么把高层次的实体拆解成低层次:史诗->主题->故事->任务。”
  • Scrum暗中包含反管理:“Scrum过度强调了团队自管理的角色。自组织和自管理的团队本身是好的,但是具有局限性…Scrum的描述并没有给与很好的平衡。”
  • 自动化测试:没有高质量的自动化测试,很难以短的迭代周期工作,很难知道故事是否真的做完了。
  • 多团队:Scrum和通用的敏捷方法很少谈及怎样扩展,虽然很多实践者有一些想法,但是还没有达成广泛的一致。

Agile Methodology Mashups

  • Pair Programming
  • Daily Scrum/Standing Meeting
  • Kanban/Burn Down Charts
  • Test First Development

敏捷开发中高质量 Java 代码开发实践

OOD & OOP

Composition versus Inheritance

  • Programming to an Interface, Not an Implementation

  • Creational Patterns Considered Obsolete

  • Inversion of Control Containers

  • Composition Realized
         [Inheritance] can cause problems when you’re trying to reuse a subclass.  Should any aspect of the inherited implementation not be appropriate for new problem domains, the parent class must be rewritten or replaced by something more appropriate.  This dependency limits flexibility and ultimately reusability.

         Object composition is defined dynamically at run-time (at startup, config-time in most IoC containers –Chad) through objects acquiring references to other objects.  Composition requires objects to respect each others’ interfaces, which in turn requires carefully designed interfaces that don’t stop you from using one object with many others.  But there is a payoff.  Because objects are accessed solely through their interfaces, we don’t break encapsulation.  Any object can be replaced at run-time by another as long as it has the same type.  Moreover, because an object’s implementation will be written in terms of object interfaces, there are substantially fewer implementation dependencies (!!! Very important –Chad)

        Object composition has another effect on system design.  Favoring object composition over class inheritance helps you keep each class encapsulated and focused on one task.  Your classes and class hierarchies will remain small and will be less likely to grow into unmanageable monsters.  On the other hand, a design based on object composition will have more objects (if fewer classes), and the system’s behavior will depend on their interrelationships instead of being defined in one class (configured and managed by the IoC container –Chad).

其他

Tags,无序,分类和家族相似

看似普通的Tag其实有着丰富的哲学含义

分类: 阅读 标签: , ,