1.装饰模式说明
目的:动态的给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更灵活。该模式以对客户端透明的方式扩展对象的功能。
使用环境:
(1)在不影响其他对象的情况下,以动态,透明的方式给单个对象添加职责。
(2)处理那些可以撤销的职责。
(3)当不能采用生成子类方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种
组合模式产生大量的子类,是的子类数目爆炸性增长。另一种情况是因为类定义被隐藏,或类定义不能用于生成子类。
2.装饰模式的结构
3.简单代码实现:不同的学生本身固有的技能,然后参加培训后就获取新的技能
1.抽象的学生类
/*
* 抽象学生
*/
public abstract class AbstractStudent {
//学生技能
public abstract void skills();
}
2.具体的专业学生
/*
* 魔术专业学生
*/
public class MgicStudent extends AbstractStudent{
@Override
public void skills() {
System.out.println("来个吧啦魔术变身");
}
}
3.培训机构抽象类
/*
* 伊藤培训
*/
public abstract class Etime extends AbstractStudent{
private AbstractStudent student;
@Override
public void skills() {
student.skills();
}
public Etime(AbstractStudent student) {
this.student =student;
}
}
4.培训机构下的java班
/*
* java培训班
*/
public class JavaClass extends Etime{
public JavaClass(AbstractStudent student) {
super(student);
}
@Override
public void skills() {
super.skills();
javaskills();
}
/*
* java班所学会的技能
*/
public void javaskills() {
System.out.println("我会helloworld了");
}
}
5.测试类
public class Test {
public static void main(String[] args) {
AbstractStudent student1 = new MgicStudent();
Etime e =new JavaClass(student1);
e.skills();;
}
}
谢谢查看,初次写有不好的地方请留言。勿喷!,