android命令行模式,Android 命令模式

前言

命令模式,多被用于程序菜单命令。比如遥控器上的左右上下我们可以理解为命令。而命令模式就是把左右上下封装起来。封装过后不管你点击左还是点击上。他们都调用同一个方法,而产生不同的效果。这样把命令和行为分离开来,就是命令模式的核心了。

命令模式定义

将“行为请求者”与“行为实现者”解耦,将一组行为抽象为对象,实现二者之间的松耦合。

命令模式举例

概念不好理解的时候,例子永远是最简单粗暴的解释。下面将举例说明解析命令模式的结构。

例子:按键左右上下,左右模拟音量加减,上下模拟节目加减。

1、我们先实现电视的左右上下功能。public class Television {    static final String TAG = Television.class.getSimpleName();    public void leftVolumeeduction() {

Log.d(TAG,"减少音量");

}    public void rightVolumeAdd() {

Log.d(TAG,"增加音量");

}    public void upProgramAdd() {

Log.d(TAG,"节目加");

}    public void downProgramEduction() {

Log.d(TAG,"节目减");

}

}

于是我们可以理解命令模式的最终接收处理者都是独立的且功能完善。

2、抽象出接口。执行命令public interface Command {    void execute();

}

具体实现各个命令// 左命令public class LeftCommand implements Command {    private Television tv;    public LeftCommand(Television tv) {        this.tv = tv;

}    @Override

public void execute() {

tv.leftVolumeeduction();

}

}// 右命令public class RightCommand implements Command{    private Television tv;    public RightCommand(Television tv) {        this.tv = tv;

}    @Override

public void execute() {

tv.rightVolumeAdd();

}

}// 上命令public class UpCommand implements Command {    private Television tv;    public UpCommand(Television tv) {        this.tv = tv;

}    @Override

public void execute() {

tv.upProgramAdd();

}

}// 下命令public class DownCommand implements Command{    private Television tv;    public DownCommand(Television tv) {        this.tv = tv;

}    @Override

public void execute() {

tv.downProgramEduction();

}

}

现在我们来理解什么叫命令请求和行为解耦。不管你有多少个命令,没次命令都调用同样的请求execute()。而命令对应的行为却不一样。即命令会去自己对应tv的行为。

3、最后我们看一下如何调用的,布局就不贴出来了,很简单就四个button。public class MainActivity extends AppCompatActivity implements View.OnClickListener{

LeftCommand lfteCommand;

RightCommand rightCommand;

UpCommand upCommand;

DownCommand downCommand;    @Override

protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Button left = (Button) findViewById(R.id.button_left);

Button right = (Button) findViewById(R.id.button_right);

Button up = (Button) findViewById(R.id.button_up);

Button down = (Button) findViewById(R.id.button_down);

left.setOnClickListener(this);

right.setOnClickListener(this);

up.setOnClickListener(this);

down.setOnClickListener(this);

Television tv = new Television();

lfteCommand = new LeftCommand(tv);

rightCommand = new RightCommand(tv);

upCommand =  new UpCommand(tv);

downCommand = new DownCommand(tv);

}    @Override

public void onClick(View view) {        switch (view.getId()) {            case R.id.button_left:

lfteCommand.execute();                break;            case R.id.button_right:

rightCommand.execute();                break;            case R.id.button_up:

upCommand.execute();                break;            case R.id.button_down:

downCommand.execute();                break;            default:                break;

}

}

}

依次点击左右上下,输出log如下:11-13 03:16:00.836 4035-4035/com.yink.designpattern.designpattern D/Television: 减少音量

11-13 03:16:02.649 4035-4035/com.yink.designpattern.designpattern D/Television: 增加音量

11-13 03:16:04.870 4035-4035/com.yink.designpattern.designpattern D/Television: 节目加

11-13 03:16:06.222 4035-4035/com.yink.designpattern.designpattern D/Television: 节目减

<1> 每个命令和view一一对应。点击buttn对应command.execute()。

<2> 每个command.exucute和tv的具体行为一一对应。

<3> 我们添加命令或者修改命令时,客户端view的调用单一,只需要更改命令和tv的具体实现,或者添加一个新的命令。实现了解耦。

命令模式小结

优点:行为请求和行为实现弱耦合,易扩展,修改,维护

缺点:设计模式通病,大量衍生类的创建。

结束语

这种若耦合的行为设计模式,很好的把行为独立,便于扩展维护。命令模式的格式也不是固定的,在我们平时开发中,只要能把行为抽象出来,都可以命令模式。需要我们注意的是,在平时的开发中,一些普通的操作,本来不复杂的,不需要怎么修改和扩展的,我们还是直接实现功能就可以了。所以在是否使用命令模式上,需要自己判断了。

作者:Yink_Liu

链接:https://www.jianshu.com/p/1e898a64ba29

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值