1:使用场景
需要透明且动态的扩展类的功能时
2:UML图
3 代码举例
public abstract class Person {
public abstract void dressed();
}
public class Boy extends Person{
@Override
public void dressed() {
System.out.println("没有装饰,只穿了内衣内裤");
}
}
public abstract class PersonCloth extends Person{
protected Person mPerson;
public PersonCloth(Person p){
mPerson=p;
}
@Override
public void dressed() {
mPerson.dressed();
}
}
public class CheapCloth extends PersonCloth{
public CheapCloth(Person p){
super(p);
}
private void dressShort(){
System.out.println("穿件破短裤");
}
@Override
public void dressed() {
super.dressed();
dressShort();
}
}
public class ExpensiveCloth extends PersonCloth{
public ExpensiveCloth(Person p){
super(p);
}
private void dressShirt(){
System.out.println("穿件贵的短袖");
}
private void dressLeather(){
System.out.println("穿件皮衣");
}
private void dressJean(){
System.out.println("穿件贵的牛仔裤");
}
@Override
public void dressed() {
super.dressed();
dressShirt();
dressLeather();
dressJean();
}
}
public class Test {
public static void main(String[] args){
Person person=new Boy();
PersonCloth clothCheap=new CheapCloth(person);
clothCheap.dressed();
PersonCloth clothExpensive=new ExpensiveCloth(person);
clothExpensive.dressed();
}
}
4: android