设计模式学习笔记 Chapter2

Chapter2——GRASP
GRASP描述设计类的原则和如何分配类的功能。
1.Information Expert:
在设计类时,如果某个类能在某方面具有完整的信息,足以实现某个责任,就将这个责任分配给这个类。
2.Creator:
以下情况类A应该有创建类B的责任:
     <1>A是B的聚合(A聚合了B,类A中有B实例属性)
     <2>A是B的容器
     <3>A有初始化B的数据
     <4>A记录B的实例
     <5>A频繁使用B
3.High Cohesion:
分解类,使得分解出来的类具有独立的责任,从而提高设计类的重用性,并且控制类设计的复杂程度。类的数量增多,类间合作完成任务,增加了耦合。
4.Low Coupling:
  作用:
     <1>使得一个类的修改对其它类的影响范围有所降低
     <2>系统更容易维护
     <3>类会变得简单、专业、高内聚,更容易理解
  A、B产生耦合的条件:
     <1>A具有一个B的属性
     <2>A调用B对象的方法
     <3>A的方法包括对B的引用,返回的是B类型或参数是B类型
     <4>A是B的子类,或者A是B的实现类
  拇指规则2条:
     <1>如果A已经与B有连接,如分配责任A给B不合适,那么分配责任B给A
     <2>两个模块中的内部类间连接是一个大错误
  Don't Talk to Strangers Principal:
不要连接不需要通信的两个对象,不要作无为的耦合。
5.Controller:
  人们通常将接收和处理系统事件的职责分配给以下类:
     <1>能全面代表系统设备或子系统的类
     <2>可以代表系统事件发生时用例发生情景的类
     <3>代表某些卷入真实世界应用中的活动的类。
  上面即为控制器类,不要将这些责任分配给用户界面类(如Window、Dialog、Page等)。
6.Polymorphism:
  GRASP共识:
     <1>系统事件的接收与处理通常由一个高级类来代替
     <2>一个子系统会有很多控制器类,分别处理不同的事务
  MVC(Model-View-Controller)三层架构
7.Pure Fabrication:
  略。
8.Indirection:
  要避免对象间直接耦合,可以将协调组件或服务的职责分配给中间对象(间接或中介对象)。引入中间对象可以使得两个子系统的重用性得到提高。当两个子系统不能独立应用时,我们可以使用抽象概念来耦合,就是采用抽象类连接相关的抽象类,那么它们的子类都可以独立应用而不用考虑这种连接。
9.Protected Variations:
  找出预计有变化或不稳定的点,为这些变化的点创建稳定的接口。

  开闭原则(the Open Closed Principal,OCP)对扩展开放,对修改关闭。即在设计一个模块的时候,应当使这个模   块在不被修改的前提下可以被扩展。

待续......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值