Template Method模式和Strategy模式:继承与委托
Themeplate Method
?
?
public class ApplicationRunner2 {private Application app = null;public ApplicationRunner2(Application app){this.app = app;}public void go(){//app.init(); 不调用init方法while(!app.done())app.idle();app.cleanup();}}?
?这样,只要使用new ApplicationRunner2(new WorkStrategy()).go()就可以了。
因此,Strategy模式比TemplateMethod模式多推荐了一个额外的好处。尽管TemplateMethod模式允许一个通用算法(run逻辑)操作多个可能的具体实现,但是由于Strategy模式完全遵循DIP原则,从而请允许每个具体实现都可以被多个不两只的通用算法(run逻辑或go逻辑)操纵。
一句话,少用继承,多用接口。
?