不是我不小心,只是真情难以寻觅,不是我存心故意,只因无法找到良机,哈哈!!!精辟
Decorator(装饰模式)
动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活.
什么时候使用?
也就是说是为已有的功能动态地添加更多功能的一种方式,当系统需要新功能的时候,是向旧的类中添加新的代码,这些新加的代码通常装饰了原有类的核心职责或主要行为.
但问题是,它们在主类中加入了新的字段,新的方法和逻辑,从而增加了主类的复杂度,而这些新加入的东西仅仅是为了满足一些只在某种特定情况下才会执行的特殊行为的需要,装饰模式却提供了一个非常好的解决方案,它把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象,因此,当需要执行特殊行为时,客户代码就可以在运行时根据需要有选择地,按顺序的使用装饰功能包装对象.
装饰模式的装饰顺序很重要.可以自己调节!
下面来看看代码实现
抽象类人!
抽象类,老师!(继承于人类)
//具体的老师
老师可以有爱好
注意测试!!!
结果!!
Jason老师动作
爱好动作---太极拳
总结一下,整理一下思路!!
1,abstract人类,具有行为(走路,思考...)
2,abstract教师,具有行为(走路,思考,教书,备课...),因为教师需要扩展,在这里我们为他准备了一个字段,[color=red]protected Person person;[/color]并且做了判断,可以理解为null他不需要扩展,反之需要扩展!
3,实际教师.
[color=red]System.out.println("Jason老师动作");
super.action();
sayHello();[/color]
这个顺序可以换,顺序改变业务逻辑随之改变.
4,Hobby(这里我写的爱好,也许不太好理解!大家可以理解成爱人)
这样就好很多,当一个女老师结婚后,身边会多一个爱人!!
(爱人必须是人,所以也要继承Person,哈哈)
就这样吧!!希望大家留言
Decorator(装饰模式)
动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活.
什么时候使用?
也就是说是为已有的功能动态地添加更多功能的一种方式,当系统需要新功能的时候,是向旧的类中添加新的代码,这些新加的代码通常装饰了原有类的核心职责或主要行为.
但问题是,它们在主类中加入了新的字段,新的方法和逻辑,从而增加了主类的复杂度,而这些新加入的东西仅仅是为了满足一些只在某种特定情况下才会执行的特殊行为的需要,装饰模式却提供了一个非常好的解决方案,它把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象,因此,当需要执行特殊行为时,客户代码就可以在运行时根据需要有选择地,按顺序的使用装饰功能包装对象.
装饰模式的装饰顺序很重要.可以自己调节!
下面来看看代码实现
抽象类人!
public abstract class Person {
//人的行为
public abstract void action();
}
抽象类,老师!(继承于人类)
public abstract class Teacher extends Person {
protected Person person;
public void setPerson(Person person) {
this.person = person;
}
@Override
public void action() {
if(person!=null)
person.action();
}
}
//具体的老师
import lesson3.dao.Teacher;
public class TeacherJason extends Teacher {
private String coutent;
@Override
public void action() {
coutent="嫦娥奔月"; //这里没有用!!
System.out.println("Jason老师动作");
super.action();
// sayHello();
}
//这里具体老师可以有自己的特点,可以扩展
// private String sayHello(){
// return "Jason教课幽默";
// }
}
老师可以有爱好
//爱好类
public class Hobby extends Person {
@Override
public void action() {
//爱好动作
System.out.println("爱好动作---太极拳");
}
}
注意测试!!!
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
//爱好
Hobby s = new Hobby();
//老师jason
TeacherJason jason = new TeacherJason();
jason.setPerson(s);
jason.action();
}
}
结果!!
Jason老师动作
爱好动作---太极拳
总结一下,整理一下思路!!
1,abstract人类,具有行为(走路,思考...)
2,abstract教师,具有行为(走路,思考,教书,备课...),因为教师需要扩展,在这里我们为他准备了一个字段,[color=red]protected Person person;[/color]并且做了判断,可以理解为null他不需要扩展,反之需要扩展!
3,实际教师.
[color=red]System.out.println("Jason老师动作");
super.action();
sayHello();[/color]
这个顺序可以换,顺序改变业务逻辑随之改变.
4,Hobby(这里我写的爱好,也许不太好理解!大家可以理解成爱人)
这样就好很多,当一个女老师结婚后,身边会多一个爱人!!
(爱人必须是人,所以也要继承Person,哈哈)
就这样吧!!希望大家留言