1.前言
- 设计模式共有23种(点击这里查看更多分类),根据目的准则分类,分为三类
- 创建型设计模式,共5种:单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。
- 结构型设计模式,共7中:适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、响元模式。
- 行为设计模式,共11种:策略模式、模版方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
- 这里介绍一下命令模式。
2.特点
- 定义:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。
2.1.代码说明
首先定义接口类,如下:
public interface DoSomething {
void execute();
}
定义具体分类,如下:
public class Classify {
public void run() {
System.out.println("打算去跑步");
}
public void play() {
System.out.println("打算去打游戏");
}
public void music() {
System.out.println("打算去听音乐");
}
}
定义接口实现类,如下:
public class Saturday implements DoSomething {
private Classify mClassify;
public Saturday(Classify classify) {
mClassify = classify;
}
@Override
public void execute() {
mClassify.play();
}
}
public class SunDay implements DoSomething {
private Classify mClassify;
public SunDay(Classify classify) {
mClassify = classify;
}
@Override
public void execute() {
mClassify.music();
}
}
创建命令调用类,如下:
public class Contain {
private List<DoSomething> mDoSomethings = new ArrayList<>();
public void addDoSomething(DoSomething doSomething) {
mDoSomethings.add(doSomething);
}
public void run() {
for (int i = 0; i < mDoSomethings.size(); i++) {
mDoSomethings.get(i).execute();
}
mDoSomethings.clear();
}
}
最终调用,如下:
Classify classify = new Classify();
Saturday saturday = new Saturday(classify);
SunDay sunDay = new SunDay(classify);
Contain contain = new Contain();
contain.addDoSomething(saturday);
contain.addDoSomething(sunDay);
contain.run();
//打印结果
System.out: 打算去打游戏
System.out: 打算去听音乐
2.2.优缺点
- 优点:添加新的命令便捷,扩展性较好;类与类之间的耦合度较低
- 缺点:可能会导致具体命令类过多
3.总结
有疑问可以留言!