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(); } }
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()); } }
http://www.cnblogs.com/god_bless_you/archive/2010/06/10/1755212.html
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();
}
}
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());
}
}