★01.设计模式概念

  1. 一个对象的所有操作统称为接口。
  2. 拥有同一接口的两个对象为同一类型。
  3. 类与类型的区别:类定义了对象的接口和数据(内部状态),类型只与对象的接口有关。不同类的对象可以有相同类型。
  4. 一个类型接口包含另一个类型接口时,我们称它是另一个类型的子类型。另一个类型称之为它的超类型。子类型继承超类型。
  5. 对象的接口与其实现四分离的,即两个相同接口的对象可以有完全不同的实现。
  6. 对象发送请求所执行的具体操作与请求有关也与对象本身有关。给对象发送请求所执行的操作在运行时刻才确定时称为动态绑定。
  7. 一个对象可以在运行时替换为另一个有相同接口的对象,这种可替换性称为多态。
  8. 对象为类的实例。
  9. 抽象类的主要目的是为子类定义公共接口,抽象类不能实例化。
  10. 抽象类中定义而未实现的操作称为抽象操作。
  11. 非抽象类称为具体类。
  12. 混入类是给其他类提供接口和功能的类,不能实例化,没有数据成员,要求多继承。
  13. 针对接口编程而不是针对实现编程。
  14. 复用方式有两种:类继承和对象组合。类继承为白箱复用,因父类内部细节可见。对象组合为黑箱复用,因用于组合的对象内部细节不可见。
  15. 类继承方式容易破坏封装性:子类通常强烈依赖父类实现,以至于父类实现发现任何变化(即使接口没变)必然导致子类发生变化,限制了复用性。一个好的解决方案是,只继承抽象类,因为 抽象类通常提供较少实现。
  16. 对象组合方式不破坏封装性,因为只能通过对象接口访问。因为对象是基于接口写的,所以实现上存在较少依赖关系。
  17. 优先使用对象组合,而不是类继承。因为对象组合通常针对接口编程,而类继承针对实现编程(第13点)。
  18. 理想情况下,应该减少创建新的构件,而多使用对象组合去组合已有构件来获得你需要的功能。但实际情况下,已有构件通常不够丰富,不得不使用继承去创建新的构件。
  19. 经验表明:设计者往往过度使用继承,但依赖对象组合的设计有更好的复用性(或更简单)。
  20. 委托是一种组合方法,将给A类的请求的处理委托给B类。如果C类与B类有相同的类型,则在需求改变时,可以简单地将B类替换为C类。
  21. 对象组合的缺点:动态的、高度参数化的软件比静态软件更难于理解,运行低效。(不过从长远来看人的低效才是更主要的。)
  22. 只有当委托使设计比较简单而不是更复杂时,它才是好的选择。
  23. ※委托是对象组合的特例?
  24. 参数化类型=类属=模板。
  25. 组合面向对象系统中的行为的三种方式:类继承、对象组合、参数化类型。
  26. 对象组合技术:能再运行时改变被组合的行为,存在间接性,比较低效,滥用降低可读性。
  27. 类继承:允许提供操作的默认实现,通过子类重定义这些操作,不能运行时改变。
  28. 参数化类型:允许改变类所用到的类型,不嗯呢运行时改变。
  29. 聚合:一个对象包含另一个对象,或者是另一个对象的一部分。拥有相同的生命周期。
  30. 相识:一个对象与另一个对象有“关联”或者“引用”关系。标识了对象间松散的耦合关系。
  31. 聚合和相识在程序设计语言中无区别,不是由语言机制决定的。
  32. 聚合:使用少,关系持久。
  33. 相识:使用多,关系短,更具动态性。
  34. 获得最大限度复用的关键在于对新需求和已有需求发生变化时的预见性,要求你的系统设计要能够相应地改进。
  35. 健壮,可根据未来需求变化而花费少量代价复用的设计:
    1. 间接创建对象,而不是显式地指定一个类来创建对象。
    2. 减少对特殊操作的依赖,最小单一功能原则,避免把请求代码写死,使改变响应请求的方法变得容易。
    3. 减少对特定硬件和软件平台的依赖。
    4. 保持封装性,对用户隐藏实现细节。
    5. 减少对可能发生变化的算法的依赖。
    6. 选择松耦合而不是紧耦合。因为紧耦合的类互相依赖,松耦合则提高了一个类本身被复用的可能性。
    7. 不要通过生成子类来扩充功能,原因:
      1. 通常很难通过定义子类来扩充功能。
      2. 需要对父类有深入的了解,破坏了封装性。
      3. 重定义一个操作可能需要重定义其他操作。
      4. 一个被重定义的操作可能需要调用继承下来的操作。
      5. 容易导致“类爆炸”,即扩充一个功能不得不引入许多新的子类。
    8. 使对类的修改方便。
  36. 设计模式通过减少依赖性来提高内部复用性。
  37. 通过孤立和封装被一个操作来消除对特定操作的依赖,可使在不同上下文中复用一个操作变得更简单。
  38. 设计模式对应用程序、工具箱、框架的作用:
    1. 应用程序:优先考虑内部复用性、可维护性和可扩充性。
    2. 工具箱:比应用程序难,强调代码复用,避免假设和依赖。使用工具箱时,写应用的主体,调用你想复用的代码。
    3. 框架:强调设计复用。必须尽可能灵活、可扩充。使用框架时,复用应用的主体,写主体调用的代码。
  39. 框架应该配合文档使用,文档对框架极其重要。
  40. 设计模式与框架的区别:
    1. 设计模式比框架更抽象。
    2. 设计模式是比框架更小的体系结构元素。
    3. 框架比设计模式更加特例化。
  41. 基于类继承的方法通常会引起类爆炸现象。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容