Head first Design Pattern中有这样一段话
有些代码会依赖特定的类型,而这样的代码一导入装饰者,会出问题
这里将的有些抽象啊,想不到具体的情况,能不能帮我讲解一下或者举个例子?设计模式

解决方案 »

  1.   

    请参看
    http://www.cnblogs.com/god_bless_you/archive/2010/06/10/1755212.html
      

  2.   

    呵呵,head first系列的都是这样的风格。
      

  3.   


    package daniel.designpattern;interface Programmer{
    public abstract String skill();
    }class BaseProgrammer implements Programmer{ @Override
    public String skill() {
    return "I can write program";
    }
    }abstract class ProgrammerDecorator implements Programmer{
    protected Programmer specificProgrammer;

    public ProgrammerDecorator(Programmer specificProgrammer){
    this.specificProgrammer = specificProgrammer;
    }

    public String skill(){
    return specificProgrammer.skill();
    }
    }class JavaProgrammer extends ProgrammerDecorator{ public JavaProgrammer(Programmer specificProgrammer) {
    super(specificProgrammer);
    }

    public String skill(){
    return specificProgrammer.skill() + programmingLanguage();
    }

    public String programmingLanguage(){
    return " using Java";
    }
    }class CProgrammer extends ProgrammerDecorator{ public CProgrammer(Programmer specificProgrammer) {
    super(specificProgrammer);
    }

    public String skill(){
    return specificProgrammer.skill() + programmingLanguage();
    }

    public String programmingLanguage(){
    return " using C";
    }
    }public class DecoratorPattern {}package daniel.designpattern;public class FactoryPatternTest {

    public static void main(String[] args){
    Production pro1 = FactoryPattern.createFactoryPattern("product1");
    pro1.showType();

    Production pro2 = FactoryPattern.createFactoryPattern("product2");
    pro2.showType();
    }
    }
      

  4.   

    Sorry,上面的测试代码错了,更正如下package daniel.designpattern;public class DecoratorPatternTest { public static void main(String[] args){

    Programmer javaProgrammer = new JavaProgrammer(new BaseProgrammer());
    System.out.println(javaProgrammer.skill());

    Programmer cProgrammer = new CProgrammer(new BaseProgrammer());
    System.out.println(cProgrammer.skill());


    Programmer masterProgrammer = new JavaProgrammer(new CProgrammer(new BaseProgrammer()));
    System.out.println(masterProgrammer.skill());
    }
    }