行为型设计模式---命令模式和中介者模式

一、命令模式

       命令模式将“请求”封装成了对象,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。


       课程视频类(真正的命令执行对象):

	/**
	 * 真正的命令执行对象
	 */
	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();

测试结果:

Alt


       此时的UML图如下:

Alt




二、中介者模式

       中介者模式可以降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合。


       用户类:

	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");
	    }
	}

       测试结果:

Alt


       此时的UML图如下:

Alt

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值