策略模式小记【原创】
最近在学设计模式,工作之余也看了一些书。怕以后忘了,对于每个设计模式,及时做个积累!
刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,妙计是放置在锦囊里,俗称就是锦囊妙计嘛,那赵云就是一个只是干活的人,从锦囊中取出妙计、执行的人。
如上图,诸葛亮给了赵云三个妙计(BackDoor等),分别实现IStrategy妙计接口,并实现接口里的operate()方法,即个妙计的具体内容。妙计得放在锦囊里,Context就是锦囊。它里面定义了一个妙计IStrategy类型变量,并有一个构造函数。客户端(调用者、赵云)向Context传入具体的妙计子类,并通过调用Context的operate方法,调用了锦囊类IStrategy的operate方法。而此时,由于传入参数是子类,所以实际上父类的operate方法已经被子类的具体operator方法所覆盖,体现出多态。
但是学完此模式,觉得有些时候此模式不宜单独使用。因为在这个模式里,客户端(赵云)需要知道要用哪个具体的妙计子类,需要将该子类传入Context,才能调用它的operate方法。有些时候甚至要在客户端判断该使用哪个子类。此时如果直接在客户端加入判断不好。应该与简单工厂相结合(要判断的时候),将判断传入具体子类的语句放在Context的构造函数中。
一句话概括:聚合关系,初始化传入对象,调用其方法!
注:本系列大部分例子来源自秦小波的《设计模式之禅》