今天学装饰者模式(decorrator), 使用同一接口的几个子类相互修饰. 或者说一个子类做核(我把它叫做核子类),另一个子类给它套壳(壳子类),用来组合两个子类的行为,不同的核与壳组合能产生(核数*壳数)种新对象.由于java是单继承,如果直接用继承来做这事得重复产生太多的3级子类.

下面是代码

package com.a;class Test4{    public static void main(String args []){        Plumber pb = new Plumber(); //做一个核        Acoworker _john = new Acoworker(pb); //套一个壳        Carpenter ct = new Carpenter(); //做一个核        Acoworker _lisa = new Acoworker(ct); //套一个壳        _john.doWork(); //最终行为        _lisa.doWork();    }}interface Worker{    public void doWork(); //注意接口的方法只能是public且不能接{},即使是空的{}也不行}class Plumber implements Worker{ //这是一个核子类    public void doWork(){ //这行我原先写的没有public,以为同包用default权限也能访问,后来发现子类继承父类的时候权限不能缩小只能扩大或相同        System.out.println("修水管 fix plumb");    }}class Carpenter implements Worker{ //同样也是一个核子类    public void doWork(){ //同上面,原先也是用default权限        System.out.println("做门窗 fix windows");    }}class Acoworker implements Worker{ //这是一个壳子类,装饰者    private Worker wk;    Acoworker(Worker worker){        this.wk = worker;    }    public void doWork(){ //同上面        System.out.println("你好!");        wk.doWork();    }}

复习到两件事:

1.同包权限default访问不适用于interface类,interface类的所有方法都必须public;

2.子类继承父类时重写方法的权限不能小于原方法.