随笔 - 35,  文章 - 3,  评论 - 100,  阅读 - 19万
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

很久之前的读书整理内容,躺在草稿里很久了。。。

 

一、 "开放-封闭"原则(OCP)

Open-Closed Principle原则讲的是:一个软件实体应当对扩展开放,对修改关闭。

优点:
    通过扩展已有软件系统,可以提供新的行为,以满足对软件的新的需求,使变化中的软件有一定的适应性和灵活性。
    已有软件模块,特别是最重要的抽象层模块不能再修改,这使变化中的软件系统有一定的稳定性和延续性。

例子:玉帝招安美猴王
当年大闹天宫便是美猴王对玉帝的新挑战。美猴王说:"'皇帝轮流做,明年到我家。'只教他搬出去,将天宫让于我!"对于这项挑战,太白金星给玉皇大帝提出的建议是:"降一道招安圣旨,宣上界来…,一则不劳师动众,二则收仙有道也。"

换而言之,不劳师动众、不破坏天规便是"闭",收仙有道便是"开"。招安之道便是玉帝天庭的"开放-封闭"原则。

 

招安之法的关键便是不允许更改现有的天庭秩序,但允许将妖猴纳入现有秩序中,从而扩展了这一秩序。用面向对象的语言来讲,不允许更改的是系统的抽象层,而允许更改的是系统的实现层。

 

 二、里氏代换原则(LSP

 

Liskov Substitution Principle(里氏代换原则):子类型(subtype)必须能够替换它们的基类型。

白马、黑马 都可以替换马的类型。
 

反过来的代换不成立
《墨子·小取》说:"娣,美人也,爱娣,非爱美人也……"娣便是妹妹,哥哥喜爱妹妹,是因为两人是兄妹关系,而不是因为妹妹是个美人。因此,喜爱妹妹不等同于喜爱美人。用面向对象语言描述,美人是基类,妹妹是美人的子类。哥哥作为一个有"喜爱()"方法,接受妹妹作为参数。那么,这个"喜爱()"方法一般不能接受美人的实例。

 

三、 依赖倒置原则(DIP)

依赖倒置(Dependence Inversion Principle)原则讲的是:要依赖于抽象,不要依赖于具体。

简单的说,依赖倒置原则要求客户端依赖于抽象耦合。

原则表述:

抽象不应当依赖于细节;细节应当依赖于抽象;
要针对接口编程,不针对实现编程。

 

使用传统过程化程序设计所创建的依赖关系,策略依赖于细节,这是糟糕的,因为策略受到细节改变的影响。依赖倒置原则使细节和策略都依赖于抽象,抽象的稳定性决定了系统的稳定性。

四、 接口隔离原则(ISP)

接口隔离原则(Interface Segregation Principle)讲的是:使用多个专门的接口比使用单一的总接口总要好。换而言之,从一个客户类的角度来讲:一个类对另外一个类的依赖性应当是建立在最小接口上的。

过于臃肿的接口是对接口的污染。不应该强迫客户依赖于它们不用的方法。

My object-oriented umbrella(摘自Design Patterns Explained)

Let me tell you about my great umbrella. It is large enough to get into! In fact, three or four other people can get in it with me. While we are in it, staying out of the rain, I can move it from one place to another. It has a stereo system to keep me entertained while I stay dry. Amazingly enough, it can also condition the air to make it warmer or colder. It is one cool umbrella.

My umbrella is convenient. It sits there waiting for me. It has wheels on it so that I do not have to carry it around. I don't even have to push it because it can propel itself. Sometimes, I will open the top of my umbrella to let in the sun. (Why I am using my umbrella when it is sunny outside is beyond me!)

In Seattle, there are hundreds of thousands of these umbrellas in all kinds of colors. Most people call them cars.

实现方法:
1、 使用委托分离接口
2、 使用多重继承分离接口

五、 合成/聚合复用原则(CARP)

合成/聚合复用原则(Composite/Aggregate Reuse Principle或CARP)经常又叫做合成复用原则(Composite Reuse Principle或CRP),就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新对象通过向这些对象的委派达到复用已有功能的目的。

简而言之,要尽量使用合成/聚合,尽量不要使用继承。

o Design to interfaces.
o Favor composition over inheritance.
o Find what varies and encapsulate it.
(摘自:Design Patterns Explained)

区分"Has-A"与"Is-A"

"Is-A"是严格的分类学意义上定义,意思是一个类是另一个类的"一种"。而"Has-A"则不同,它表示某一个角色具有某一项责任。

导致错误的使用继承而不是合成/聚合的一个常见的原因是错误的把"Has-A"当作"Is-A"。

雇员、经理、学生描述的是一种角色,比如一个人是"经理"必然是"雇员",另外一个人可能是"学生雇员",在上面的设计中,一个人无法同时拥有多个角色,是"雇员"就不能再是"学生"了,这显然是不合理的。

错误源于把"角色"的等级结构与"人"的等级结构混淆起来,误把"Has-A"当作"Is-A"。

 

六、 迪米特法则(LoD)

迪米特法则(Law of Demeter或简写LoD)又叫最少知识原则(Least Knowledge Principle或简写为LKP),也就是说,一个对象应当对其它对象有尽可能少的了解。

其它表述:
  只与你直接的朋友们通信
  不要跟"陌生人"说话
  每一个软件单位对其它的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。

 

posted @ 2019-03-07 21:05 Jerry Tian 阅读(359) 评论(0) 推荐(1) 编辑
摘要: .net 客户端调用java或.net webservice进行soapheader验证 最近项目中有业务需要跨平台调用web服务,客户端和服务器之间采用非对称加密来保证数据的安全性,webservice的安全验证基于soapheader。 借此机会,顺便整理一下调用.net webservice 阅读全文
posted @ 2019-03-06 12:51 Jerry Tian 阅读(559) 评论(0) 推荐(0) 编辑
摘要: 好久没有更新了,不找原因和借口。博客还是要定时总结更新,下面是之前总结的读书内容,很早之前都编辑好了,一直躺在随笔中没有发布出来,发出来,激励自己,不断前进。。。 关于OOAD: 伟大软件的简易3步骤: 关于需求: 好的需求确保你的系统如客户预期的那样运作。 确认需求涵盖了系统的所有用例。 运用用例 阅读全文
posted @ 2018-06-18 15:18 Jerry Tian 阅读(755) 评论(0) 推荐(0) 编辑
摘要: 演示System.Collections.Generic的各容器类的用法.包括:Dictionary,KeyValuePair,SortedDic tionary,SortedList,HashSet,SortedSet,List,Queue,Stack等 1 System.Collections... 阅读全文
posted @ 2016-01-21 16:57 Jerry Tian 阅读(6041) 评论(0) 推荐(0) 编辑
摘要: MVC 从后台页面 取前台页面传递过来的值的几种取法前台页面 Index视图注意:用户名表单的name值为txtName 密码表单的name值为txtPassword 1 2 3 4 Test 5 6 7 8 9 用户名1... 阅读全文
posted @ 2015-12-27 10:50 Jerry Tian 阅读(17430) 评论(0) 推荐(1) 编辑
摘要: UI基础教程 – 原生App切图的那些事儿转发:http://www.shejidaren.com/app-ui-cut-and-slice.html移动APP切图是UI设计必须学会的一项技能,切图虽然简单,但还是有很多地方需要注意的,下面由tgideas的 LV主唱大人 跟大家讲讲原生App切图的... 阅读全文
posted @ 2015-12-27 10:15 Jerry Tian 阅读(455) 评论(0) 推荐(0) 编辑
摘要: 浅析JSONP-解决Ajax跨域访问问题 很久没有写随笔了,总是感觉没时间,其实时间就是。。。废话少说,前几天,工作上有一新需求,需要前端web页面异步调用后台的Webservice方法返回信息。实现方法有多种,本例采用jQuery+Ajax,完成后,在本地调试了一切ok,但是部署到服务器上以后就出... 阅读全文
posted @ 2014-12-31 01:23 Jerry Tian 阅读(48054) 评论(7) 推荐(3) 编辑
摘要: 昨天遇到一个关于引用路径的奇葩问题,如下:在项目中有一功能引用StringTemplate做模板,根据变量生成不同类型的邮件模板,作为不同类型的邮件内容。问题是在Debug模式下可以完全编译,不会出现错误。但在release模式下编译不通过,提示一串错误,认不到命名空间和StringTemplate... 阅读全文
posted @ 2014-06-23 00:19 Jerry Tian 阅读(341) 评论(0) 推荐(0) 编辑
摘要: 相信許多人對字符編碼都不是很了解,透過下文可以清晰的理解各种字符编码方式详解及由来。 一直对字符的各种编码方式懵懵懂懂,什么ANSI、UNICODE、UTF-8、GB2312、GBK、DBCS、UCS……是不是看的很晕,假如您细细的阅读本文你一定可以清晰的理解他们。Let's go!http://www.phpweblog.net/fuyongjie/archive/2009/03/11/6374.html 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为"字节"。 再后来,他 阅读全文
posted @ 2013-12-15 12:17 Jerry Tian 阅读(443) 评论(0) 推荐(1) 编辑
摘要: 以前收集整理的關於接口、委託、事件、回調的介紹,採用講故事的方式講解,簡明扼要。C#:皮特的故事从前,在南方一块奇异的土地上,有个工人名叫彼得,他非常勤奋,对他的老板总是百依百顺。但是他的老板是个吝啬的人,从不信任别人,坚决要求随时知道彼得的工作进度,以防止他偷懒。但是彼得又不想让老板呆在他的办公室里站在背后盯着他,于是就对老板做出承诺:无论何时,只要我的工作取得了一点进展我都会及时让你知道。彼得通过周期性地使用“带类型的引用”(原文为:“typed reference” 也就是delegate??)“回调”他的老板来实现他的承诺,如下:namespace皮特的故事_原始版{ class Wo 阅读全文
posted @ 2012-10-17 13:28 Jerry Tian 阅读(1136) 评论(2) 推荐(0) 编辑
点击右上角即可分享
微信分享提示