本帖最后由 我要的幸福呢 于 2014-2-24 21:42 编辑
装饰设计模式,顾名思义就是起到一个“装饰”的作用,其实就是在原来注功能实现的基础上增加一些功能,但又不改变原来的对象。用毕老师视频中的例子来说,就是一个人Person类有一个吃饭chifan()的功能(可以想象成吃主食),但现在想增加一些功能,比如吃饭前先吃点凉菜什么的,吃完饭后再吃点甜点或者抽根烟什么的,但直接在原来的功能上增加代码又不太好,因为可能这些功能只是你需要的,别人并不需要。因此,就创建一个新的类,将Person类传入这个类中,然后再新创建的类中通过Person对象调用chifan()方法,在其前面或后面加上你想要实现的加强功能,这个新创建的类就叫装饰类。通常装饰类想要实现的功能,和被“装饰”的类功能是重复的,所以让装饰类继承被装饰类,这样就可以增强所有被装饰类的子类(比如学生Student和工人Worker)的功能。代码实现如下:- class Person {
- public void chifan()
- {
- System.out.println("吃饭啦!");
- }
- }
- class Student extends Person {
- @Override
- public void chifan() {
- // TODO Auto-generated method stub
- super.chifan();
- System.out.println("我吃的是食堂的大锅");
- }
- }
- class Worker extends Person {
- @Override
- public void chifan() {
- // TODO Auto-generated method stub
- super.chifan();
- System.out.println("我吃的是工地的盒饭");
- }
- }
- //装饰类
- class Decoration extends Person {
- private Person p;
- public Decoration(Person p) {
- this.p = p;
- }
- @Override
- public void chifan() {
- // TODO Auto-generated method stub
- System.out.println("先吃点开胃小菜");
- p.chifan();
- System.out.println("吃饱了,来一根");
- }
- }
- public class DecorationDemo {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Person p = new Person();
- p.chifan();
- Student s = new Student();
- s.chifan();
- Worker w = new Worker();
- w.chifan();
-
-
- Decoration d1 = new Decoration(p);
- Decoration d2 = new Decoration(s);
- Decoration d3 = new Decoration(s);
-
- d1.chifan();
- d2.chifan();
- d3.chifan();
- }
- }
复制代码
|