1.继承来扩展行为的方法是静态的,不灵活,因此用一个外部的decrator来封装要装饰的类,且该decrator实现了要装饰的类的接口,并把client的请求传递给要装饰的类,这样decrator看起来是透明的,不存在的。但是又可以添加新的行为,即在转发前后者转发后添加行为。
2. 命令模式 action 或者trasaction模式是指 component如按钮不知道自己要执行什么动作,用户点击该按钮时不知道该执行啥,则应该把 <命令接收者,执行的动作>封装在一起。comonent直接调用接受者来响应用户点击。
先创建一个command类实现command抽象接口,然后制定该command的receiver,即由谁取处理请求,然后创建一个invoker类,指定成员为command。
即把发送请求(invoker)和处理请求(receiver)分开。
命令模式是回调函数的面向对象的实现。
命令对象串成链可以成为undo和redo的实现。
client新建具体的命令对象(指定该命令的接收者),并且注册到invoker函数里(invoker.set(command))
职责链模式中的request并不是命令模式中的命令,request可以是一个字符,收发双方协定好编码的含义来确定请求的类型。而命令模式中的命令是注册在invoker类里的,而且command里封装了receiver和响应的操作。
可以在职责链模式中把请求封装成对象,然后有新的请求时用继承来添加。
request类可以封装各个请求参数,职责链上的handler如果已经固定,则可以在里面放一个invoker接口,通过注入invoker这种面向对象的回调方法实现对未来不确定请求的应对。【这才是和command模式结合的地方】