欢迎来到天天文库
浏览记录
ID:40305431
大小:339.00 KB
页数:11页
时间:2019-07-30
《对象设计和职责分配的设计模式(GRASP)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、设计模式Gof设计模式GRASP(职责分配原则)1. InformationExpert(信息专家)信息专家模式是面向对象设计的最基本原则,是我们平时使用最多,应该跟我们的思想融为一体的原则。也就是说,我们设计对象(类)的时候,如果某个类拥有完成某个职责所需要的所有信息,那么这个职责就应该分配给这个类来实现。这时,这个类就是相对于这个职责的信息专家。例如:常见的网上商店里的购物车(ShopCar),需要让每种商品(SKU)只在购物车内出现一次,购买相同商品,只需要更新商品的数量即可。如下图:针对这个问题需要权衡的是,比较商品是否相同的方法需要放到那里类里来
2、实现呢?分析业务得知需要根据商品的编号(SKUID)来唯一区分商品,而商品编号是唯一存在于商品类里的,所以根据信息专家模式,应该把比较商品是否相同的方法放在商品类里。 2. Creator(创造者)实际应用中,符合下列任一条件的时候,都应该由类A来创建类B,这时A是B的创建者:a. A是B的聚合b. A是B的容器c. A持有初始化B的信息(数据)d. A记录B的实例e. A频繁使用B如果一个类创建了另一个类,那么这两个类之间就有了耦合,也可以说产生了依赖关系。依赖或耦合本身是没有错误的,但是它们带来的问题
3、就是在以后的维护中会产生连锁反应,而必要的耦合是逃不掉的,我们能做的就是正确地创建耦合关系,不要随便建立类之间的依赖关系,那么该如何去做呢?就是要遵守创建者模式规定的基本原则,凡是不符合以上条件的情况,都不能随便用A创建B。例如:因为订单(Order)是商品(SKU)的容器,所以应该由订单来创建商品。如下图: 这里因为订单是商品的容器,也只有订单持有初始化商品的信息,所以这个耦合关系是正确的且没办法避免的,所以由订单来创建商品。 3. Lowcoupling(低耦合)低耦合模式的意思就是要我们尽可能地减少类之间的连接。其作用非常重要:a.
4、 低耦合降低了因一个类的变化而影响其他类的范围。b. 低耦合使类更容易理解,因为类会变得简单,更内聚。下面这些情况会造成类A、B之间的耦合:a. A是B的属性b. A调用B的实例的方法c. A的方法中引用了B,例如B是A方法的返回值或参数。d. A是B的子类,或者A实现了B关于低耦合,还有下面一些基本原则:a. Don’tTalktoStrangers原则:意思就是说,不需要通信的两个对象之间,不要进行无谓的连接,连接了就有可能产生问题,不连接就一了百了啦!b. 如果A已经和B有连接,如果
5、分配A的职责给B不合适的话(违反信息专家模式),那么就把B的职责分配给A。c. 两个不同模块的内部类之间不能直接连接,否则必招报应!嘿!例如:Creator模式的例子里,实际业务中需要另一个出货人来清点订单(Order)上的商品(SKU),并计算出商品的总价,但是由于订单和商品之间的耦合已经存在了,那么把这个职责分配给订单更合适,这样可以降低耦合,以便降低系统的复杂性。如下图: 这里我们在订单类里增加了一个TotalPrice()方法来执行计算总价的职责,没有增加不必要的耦合。 4. Highcohesion(高内聚)高内聚的意思是给
6、类尽量分配内聚的职责,也可以说成是功能性内聚的职责。即功能性紧密相关的职责应该放在一个类里,并共同完成有限的功能,那么就是高内聚合。这样更有利于类的理解和重用,也便于类的维护。高内聚也可以说是一种隔离,就想人体由很多独立的细胞组成,大厦由很多砖头、钢筋、混凝土组成,每一个部分(类)都有自己独立的职责和特性,每一个部分内部发生了问题,也不会影响其他部分,因为高内聚的对象之间是隔离开的。例如:一个订单数据存取类(OrderDAO),订单即可以保存为Excel模式,也可以保存到数据库中;那么,不同的职责最好由不同的类来实现,这样才是高内聚的设计,如下图: 这里
7、我们把两种不同的数据存储功能分别放在了两个类里来实现,这样如果未来保存到Excel的功能发生错误,那么就去检查OrderDAOExcel类就可以了,这样也使系统更模块化,方便划分任务,比如这两个类就可以分配个不同的人同时进行开发,这样也提高了团队协作和开发进度。 5. Controller(控制器)用来接收和处理系统事件的职责,一般应该分配给一个能够代表整个系统的类,这样的类通常被命名为“XX处理器”、“XX协调器”或者“XX会话”。关于控制器类,有如下原则:a. 系统事件的接收与处理通常由一个高级类来代替。b. 一个子系统会有很
8、多控制器类
此文档下载收益归作者所有