SchoolReport(Component)
public abstract class SchoolReport { public abstract void report() ; public abstract void sign(String name) ; }FourthSchoolReport(ConcreteComponet)
package decorator; public class FourthGradeSchoolReport extends SchoolReport{ @Override public void report() { System.out.println("尊敬的XXX家长"); System.out.println("..........."); System.out.println("语文62 , 数学65 , 体育98 , 自然63"); System.out.println(" 家长签名: "); } @Override public void sign(String name) { System.out.println("家长签名为: " + name); } }Decorator(Decorator)
public class Decorator extends SchoolReport{ protected SchoolReport sr ; public Decorator(SchoolReport sr){ this.sr = sr ; } public void report(){ this.sr.report() ; } public void sign(String name){ this.sr.sign(name) ; } }HignScoreDecorator(ConcreteDecorator)
public class HignScoreDecorator extends Decorator{ public HignScoreDecorator(SchoolReport sr) { super(sr); } public void reportHignScore(){ System.out.println("这次考试的语文最高分为75,数学是80,自然是80"); } public void report(){ this.reportHignScore(); super.sr.report(); } }SortDecorator(Decorator)
public class SortDecorator extends Decorator{ public SortDecorator(SchoolReport sr) { super(sr); } @Override public void report(){ super.sr.report(); this.sortReport() ; } private void sortReport() { System.out.println("这次排名我是第38名"); } }Father(Client)
public class Father{ public static void main(String[] args) { SchoolReport sr = new FourthGradeSchoolReport() ; sr = new HignScoreDecorator(sr) ; sr = new SortDecorator(sr) ; sr.report(); sr.sign("老三"); } }Java IO中的装饰模式
<<设计模式之禅>> << java与模式>>
