网站大量收购独家精品文档,联系QQ:2885784924

[计算机软件及应用]第二章绪设计模式基础.ppt

[计算机软件及应用]第二章绪设计模式基础.ppt

  1. 1、本文档共95页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[计算机软件及应用]第二章绪设计模式基础

迪米特法则 广义的迪米特法则 优先考虑将一个类设置成不变类 如string 即使一个类必须是可变类,在给它的属性设置赋值方法的时候也要保持吝啬的态度 尽量降低一个类的访问权限 尽量降低成员的访问权限 迪米特法则 思考 下面的两段代码从迪米特法则的角度考察,哪个更好? 从迪米特法则的角度考察下面的说法 你走你的阳关道,我走我的独木桥 城门失火,殃及池鱼 for(IEnumerator ie=vec.GetEmuerator();vec.MoveNext();) {...} IEnumerator ie=vec.GetEmuerator(); while(vec.MoveNext()){ ...} * 开-闭原则 定义: 一个软件实体应当对扩展开放,对修改关闭 Software entities should be open for extension,but closed for modification. 实现该原则的关键技术: 抽象化 从抽象层导出一个或多个新的具体类可以改变系统的行为,因此系统的设计对扩展是开放的 抽象层预见了所有的可能扩展,因此,在任何扩展情况下都不会改变,这就是对改变的关闭 举例 用面向对象的方式模拟我们回家之后开灯、离开家之后关灯的过程 对象 家 进入操作 离开操作 灯 打开操作 关闭操作 类图描述 public void Enter(){ mLight.Open(); } public void Leave(){ mLight.Close(); } public Light light{ get{ return mLight;} set{ mLight=value;} } public void Open(){ System.Console.WriteLine(“light turnning on...”); } public void Close(){ System.Console.WriteLine(“light turnning off...”); } 测试 public class TestMain{ public static void Main(){ Room room=new Room(); Light light=new Light(); room.light=light; room.entry(); System.Console.WriteLine(“living...”); room.leave(); } } 现在要给房子里加上电视机,程序该怎么改? 类图描述 public void Enter(){ mLight.Open(); mTV.Open(); } public void Leave(){ mLight.Close(); mTV.Close(); } public Light light{ get{ return mLight;} set{ mLight=value;} } public TV tv{...} 随着生活水平不断的提高,还要不停的给家里增加衣柜、计算机... 使用OCP解决代码易维护 Switch预见了所有的具有打开和关闭功能的生活用品 Switch也同时允许所有具有该接口的类扩充到系统中来 Demo:演示这种设计给系统扩充带来的便利 里氏代换原则(LSP) 如果对每一个类型为T1的对象O1,都有类型为T2的对象O2,使得以T1定义的所有程序P在所有的对象O1都代换成O2时,程序P的行为没有变化,那么类型T2就是T1的子类型 反过来的代换是不成立的 只有当子类可以替换掉基类,软件单位的功能不受影响的时候,我们才说基类真正被复用了。 比如有两个类,一个是BASE类,一个是DERIVED类,并且DERIVED类是BASE类的的子类。那么一个方法可以接受一个基类对象b的话: method(Base b) 那么它必然可以接受一个子类对象d 即 method(d) 举例:长方形和正方形 如果正方形是长方形的子类,那么他们之间能满足里氏替换原则吗? 长方形的定义 public class Rectangle{ private long width; private long height; public virtual void setWidth(long width){ this.width=width; } public virtual void setHeight(long height

您可能关注的文档

文档评论(0)

hhuiws1482 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档