java设计模式—装饰模式
一.概述
装饰模式是指在以一个已有类作为基础,创建一个更多功能的装饰类,这个装饰类是作为现有类的一个包装。这点有点像一个子类继承一个父类,但比继承更灵活。
二.模式示例:
假设我们有个学生类(Student),学生的职责是学习,而值日生除了学习还有一些值日的工作(如檫黑板)。在这种情况下,学生可以作为一个基类,而值日生就是一个装饰类,具体代码实现如下:
1.创建学生接口
public interface IStudent {
public void study();
}
2.创适学生类
public class Student implements IStudent{
@Override
public void study() {
System.out.println("学习");
}
}
3.创建学生抽象装饰类。
public abstract class StudentDecorator implements IStudent{
protected IStudent student;
public StudentDecorator(IStudent student){
this.student = student;
}
@Override
public void study() {
student.study();
}
}
4.创建值日生类
public class DutyStudent extends StudentDecorator{
public DutyStudent(IStudent student) {
super(student);
}
@Override
public void study() {
student.study();
this.onDuty();
}
private void onDuty(){
System.out.println( "今天值日");
}
}
5.模式调用
public class Test {
public static void main(String[] args) {
DutyStudent duty = new DutyStudent(new Student());
duty.study();
}
}