您的位置:首页 > 其它

6.偏头痛杨的常见设计模式入门系列之命令模式篇

2017-10-25 18:11 344 查看
前戏
命令模式超级无敌简单并且非常常见,只要你学习接口与匿名内部类那块知识的时候没有睡觉就可以了。
(如果不懂可以参考我的java入门系列文章,里面有介绍接口与内部类)
很多框架在某方法内部有一些逻辑是需要从方法外部传进来的,那怎么传?就两个东西:接口+匿名内部类。
也许你以前也经常使用这种设计模式,但只是不知道它叫命令模式而已。

什么是命令模式
编写方法时,方法中有一部分代码是无法确定的,是需要在执行&调用该方法时通过参数传递进方法中。
换句话说,我们需要把一部分代码通过参数传参的形式,传递到方法中。

java目前不允许一段代码以单独的形式存在,那我们需要给这段代码套上一个方法,但方法也不能独立存在,
于是我们要给这个方法套上一个类,那其实传递这段代码,其实就是传递这个类的实例&对象。
这个对象&实例通常是一个接口的匿名实现类的实例,该接口通常被称为命令接口,这种设计模式被称为命令模式。

手动实现命令模式
定义命令接口

public interface Command {
    public void eat();
}

定义目标方法,需要传入命令接口,再调用实现命令接口类的对象的方法。

public class Process {
    public static void doSomething(Command c)
{
        System.out.println("模拟工作");
        // 吃饭的逻辑目前定不下来,需要从外面传进来。
        c.eat();
        System.out.println("模拟睡觉");
    }
}

测试主函数

public static void main(String[] args) {
        Process.doSomething(new Command() {
            public void eat() {
                System.out.println("各种疯狂的吃啊啊啊~~~");
            }
        });
        
        System.out.println("---------------------");
        
        Process.doSomething(new Command() {
            public void eat() {
                System.out.println("慢悠悠的吃呢~~~");
            }
        });
    }

总结
命令模式实现了两部分代码的分离,一般在框架或公用方法非常常见,结合接口的灵活性,配合的无懈可击。
一般在某些框架中的XXXCallBack()中经常使用命令模式,也是我们常说的回调。。。
目的就是更加的灵活,大型框架允许调用者有自定义的代码&逻辑传递进框架底层
(例如hibernate、spring jdbc等),框架底层来执行用户自定义的代码,自定义部分众口难调,
不如就把口子放开,你们自己传吧。

调用者把命令传递给被调用者,被调用者去执行命令,命令模式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: