您的位置:首页 > 移动开发 > Android开发

Android基础-java的装饰模式

2013-08-16 15:28 211 查看
什么是装饰模式:

按我的理解,装饰模式就相当于装潢,买了一个房子,里面有厨房,厕所,客厅等等,但是它们可能并不完全,比如说,客厅缺少沙发,厨房缺少餐具,装潢就是要将它们补全。而装饰模式就是相当于装潢,写代码不可能面面俱到,总有遗漏,去修改一个类,不如去添加一个新类,去补充。

如何制造一个装饰模式:

首先,我们需要一个接口,就像这样:

public interface Person {

void dosomething();
}


既然有了接口,我们就得去实现它,像这样:

public class Teacher implements Person {

@Override
public void dosomething() {
// TODO Auto-generated method stub
System.out.println("我会教书");
}

}
按照正常思路,到这里,我们就应该写我们的主类,然后通过主类中的main函数new一个Teacher,然后调用Teacher中dosomething函数输出打印。但是,很显然,很多时候,我们需要的信息远远不止这些,如此程序中,我们不仅想知道这个老师会教书,还想知道他来自哪个学校。当然,在Teacher中直接添加打印输入在本程序中十分简单,但是如果程序很大,需要修改的内容很多,或者是Teacher类不允许我们修改,该怎么办,这里就需要用到装饰模式。

接下要做的就是,再新建一个类,像这样:

public class DecoratorTeacher implements Person {

private Person p;  //精髓在这里

public DecoratorTeacher(Person p) {  //主函数可以new一个该类的对象,并传入,传入的自然是Person接口的子类,可以向上转型成Person类
this.p = p;
}

@Override
public void dosomething() {
// TODO Auto-generated method stub
System.out.println("我是XX大学的老师");
p.dosomething();      //然后,这里的p就是传入的子类了,虽然它的类型是Person类,但并没影响该子类里的内容
}

}
public class Test {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

Teacher teacher = new Teacher();
DecoratorTeacher dt = new DecoratorTeacher(teacher);
dt.dosomething();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: