1 代码演练
1.1 代码演练1
1 代码演练
1.1 代码演练1
需求:
木木网付费课程,第一节课可以不付费观看或者付费观看,通过命令模式实现
注意:(个人开发中没有注意到的地方)
a 接口无法添加属性(添加属性的接口编译器默认赋值成静态的,已经不属于本类属性范畴了),属性通过它的实现类来添加,参见打开课程命令类或者关闭课程命令类(标红部分)。
b 员工类命令集合 用ArrayList列表实现,先进先出,后进后出。
c 实际场景中,调用完执行命令后,记得把命令列表清空,参见员工类.
uml类图:

测试类:
package com.geely.design.pattern.behavioral.command;
public class Test {
public static void main(String [] args){
CourseVideo courseVideo = new CourseVideo("豆豆哲学论");
//关闭课程的命令
Command command = new CloseCourseVideoCommand(courseVideo);
//打开课程的命令
Command command1 = new OpenCourseVideoCommand(courseVideo);
Staff staff1 = new Staff();
staff1.addCommond(command);
staff1.addCommond(command1);
staff1.executeCommond();
}
}
课程视频类:
package com.geely.design.pattern.behavioral.command;
/**
* 课程视频类
*/
public class CourseVideo {
private String name;
public CourseVideo(String name) {
this.name = name;
}
public void openVideo(){
System.out.println(this.name+"课程打开");
}
public void closeVideo(){
System.out.println(this.name+"课程关闭");
}
}
命令接口:
package com.geely.design.pattern.behavioral.command;
/**
* 注:接口可以不传入属性,属性在实现类中注入
*/
public interface Command {
void execute();
}
打开课程视频命令类:
package com.geely.design.pattern.behavioral.command;
public class OpenCourseVideoCommand implements Command {
private CourseVideo courseVideo ;
public OpenCourseVideoCommand(CourseVideo courseVideo) {
this.courseVideo = courseVideo;
}
@Override
public void execute() {
this.courseVideo.openVideo();
}
}
关闭课程视频命令类:
package com.geely.design.pattern.behavioral.command;
public class CloseCourseVideoCommand implements Command {
private CourseVideo courseVideo;
public CloseCourseVideoCommand(CourseVideo courseVideo) {
this.courseVideo = courseVideo;
}
@Override
public void execute() {
this.courseVideo.closeVideo();
}
}
员工类:
package com.geely.design.pattern.behavioral.command;
import java.util.ArrayList;
import java.util.List;
public class Staff {
//这里用到 ArrayList的有序列表的属性,先进先出,后进后出
private List<Command> commandList = new ArrayList<Command>();
/**
* 员工添加命令
* @param command
*/
public void addCommond(Command command){
commandList.add(command);
}
/**
* 员工执行命令
*/
public void executeCommond(){
for(int i=0;i<commandList.size();i++){
commandList.get(i).execute();
}
//这个别忘了,最后把命令清空。
commandList.clear();
}
}
打印日志:
豆豆哲学论课程关闭 豆豆哲学论课程打开 Process finished with exit code 0
来源:https://www.cnblogs.com/1446358788-qq/p/12381521.html