一、命令模式
命令模式将“请求”封装成了对象,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
课程视频类(真正的命令执行对象):
/**
* 真正的命令执行对象
*/
public class CourseVideo {
private String name;
public CourseVideo(String name) {
this.name = name;
}
public void open() {
System.out.println(this.name + "课程视频开放");
}
public void close() {
System.out.println(this.name + "课程视频关闭");
}
}
命令接口:
public interface Command {
void execute();
}
开命令的类:
/**
* 开命令
*/
public class OpenCourseVideoCommand implements Command {
private CourseVideo courseVideo;
public OpenCourseVideoCommand(CourseVideo courseVideo) {
this.courseVideo = courseVideo;
}
@Override
public void execute() {
courseVideo.open();
}
}
关命令的类:
/**
* 关命令
*/
public class CloseCourseVideoCommand implements Command {
private CourseVideo courseVideo;
public CloseCourseVideoCommand(CourseVideo courseVideo) {
this.courseVideo = courseVideo;
}
@Override
public void execute() {
courseVideo.close();
}
}
使用命令对象的入口类:
/**
* 使用命令对象的入口
*/
public class Staff {
private List<Command> commandList = new ArrayList<>();
public void addCommand(Command command) {
commandList.add(command);
}
public void executeCommands() {
for (Command command : commandList) {
command.execute();
}
commandList.clear();
}
}
测试代码:
CourseVideo courseVideo = new CourseVideo("Java设计模式精讲");
Command openCourseVideoCommand = new OpenCourseVideoCommand(courseVideo);
Command closeCourseVideoCommand = new CloseCourseVideoCommand(courseVideo);
Staff staff = new Staff();
staff.addCommand(openCourseVideoCommand);
staff.addCommand(closeCourseVideoCommand);
staff.executeCommands();
测试结果:
此时的UML图如下:
二、中介者模式
中介者模式可以降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合。
用户类:
public class User {
private String name;
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void sendMessage(String message) {
StudyGroup.showMessage(this, message);
}
}
通信的中介类:
public class StudyGroup {
public static void showMessage(User user, String message) {
System.out.println(new Date().toString() + " [" + user.getName() + "]: " + message);
}
}
测试类:
public class MediatorTest {
public static void main(String[] args) {
User jim = new User("Jim");
User tom = new User("Tom");
jim.sendMessage("Hey! Tom! Let's learn Design Pattern");
tom.sendMessage("OK! Jim");
}
}
测试结果:
此时的UML图如下: