本文共 12195 字,大约阅读时间需要 40 分钟。
public class BatterCake { protected String getMsg(){ return "煎饼";} protected int getPrice(){ return 5;}}
public class BatterCakeWithEgg extends BatterCake{ protected String getMsg(){ return super.getMsg() + " + 1 个鸡蛋";}; public int getPrice(){ return super.getPrice() + 2;}}
public class BatterCakeWithEggAndSauage extends BatterCakeWithEgg { protected String getMsg(){ return super.getMsg() + " + 1 个香肠";}; public int getPrice(){ return super.getPrice() + 2;}}
public class Test { public static void main(String[] args) { BatterCake batterCake = new BatterCake(); System.out.println(batterCake.getMsg()+ ",总价: " + batterCake.getPrice()); BatterCakeWithEgg battercakeWithEgg = new BatterCakeWithEgg(); System.out.println(battercakeWithEgg.getMsg() + ",总价: " + battercakeWithEgg.getPrice()); BatterCakeWithEggAndSauage battercakeWithEggAndSauage = new BatterCakeWithEggAndSauage(); System.out.println(battercakeWithEggAndSauage.getMsg() + ",总价: " + battercakeWithEggAndSauage.getPrice()); }}
public abstract class BatterCake { protected abstract String getMsg(); protected abstract int getPrice();}
public class BatterCakeDecorator extends BatterCake{ private BatterCake batterCake; public BatterCakeDecorator(BatterCake batterCake){ this.batterCake = batterCake; } @Override protected String getMsg() { return this.batterCake.getMsg(); } @Override protected int getPrice() { return this.batterCake.getPrice(); }}
public class BaseBatterCake extends BatterCake{ @Override protected String getMsg() { return "煎饼"; } @Override protected int getPrice() { return 5; }}
public class EggDecorator extends BatterCakeDecorator{ public EggDecorator(BatterCake batterCake){ super(batterCake); } @Override protected String getMsg() { return super.getMsg() + " + 1 个鸡蛋"; } @Override protected int getPrice() { return super.getPrice() + 2; }}
public class SauageDecorator extends BatterCakeDecorator{ public SauageDecorator(BatterCake batterCake){ super(batterCake); } @Override protected String getMsg() { return super.getMsg() + " + 1 个香肠"; } @Override protected int getPrice() { return super.getPrice() + 2; }}
public class PotatoDecorator extends BatterCakeDecorator{ public PotatoDecorator(BatterCake batterCake) { super(batterCake); } protected String getMsg(){ return super.getMsg() + " + 土豆丝";} protected int getPrice(){ return super.getPrice() + 1;};}
public class Test { public static void main(String[] args) { BatterCake batterCake; batterCake = new BaseBatterCake(); batterCake = new EggDecorator(batterCake); batterCake = new EggDecorator(batterCake); batterCake = new SauageDecorator(batterCake); batterCake = new SauageDecorator(batterCake); batterCake = new PotatoDecorator(batterCake); batterCake = new PotatoDecorator(batterCake); batterCake = new PotatoDecorator(batterCake); System.out.println(batterCake.getMsg() + ",总价: " + batterCake.getPrice()); }}
public class LoggerDecorator implements Logger { protected Logger logger; public LoggerDecorator(Logger logger){ this.logger = logger; } @Override public String getName() { return null; } @Override public boolean isTraceEnabled() { return false; } @Override public void trace(String s) { } @Override public void trace(String s, Object o) { } @Override public void trace(String s, Object o, Object o1) { } @Override public void trace(String s, Object... objects) { } @Override public void trace(String s, Throwable throwable) { } @Override public boolean isTraceEnabled(Marker marker) { return false; } @Override public void trace(Marker marker, String s) { } @Override public void trace(Marker marker, String s, Object o) { } @Override public void trace(Marker marker, String s, Object o, Object o1) { } @Override public void trace(Marker marker, String s, Object... objects) { } @Override public void trace(Marker marker, String s, Throwable throwable) { } @Override public boolean isDebugEnabled() { return false; } @Override public void debug(String s) { } @Override public void debug(String s, Object o) { } @Override public void debug(String s, Object o, Object o1) { } @Override public void debug(String s, Object... objects) { } @Override public void debug(String s, Throwable throwable) { } @Override public boolean isDebugEnabled(Marker marker) { return false; } @Override public void debug(Marker marker, String s) { } @Override public void debug(Marker marker, String s, Object o) { } @Override public void debug(Marker marker, String s, Object o, Object o1) { } @Override public void debug(Marker marker, String s, Object... objects) { } @Override public void debug(Marker marker, String s, Throwable throwable) { } @Override public boolean isInfoEnabled() { return false; } @Override public void info(String s) { } @Override public void info(String s, Object o) { } @Override public void info(String s, Object o, Object o1) { } @Override public void info(String s, Object... objects) { } @Override public void info(String s, Throwable throwable) { } @Override public boolean isInfoEnabled(Marker marker) { return false; } @Override public void info(Marker marker, String s) { } @Override public void info(Marker marker, String s, Object o) { } @Override public void info(Marker marker, String s, Object o, Object o1) { } @Override public void info(Marker marker, String s, Object... objects) { } @Override public void info(Marker marker, String s, Throwable throwable) { } @Override public boolean isWarnEnabled() { return false; } @Override public void warn(String s) { } @Override public void warn(String s, Object o) { } @Override public void warn(String s, Object... objects) { } @Override public void warn(String s, Object o, Object o1) { } @Override public void warn(String s, Throwable throwable) { } @Override public boolean isWarnEnabled(Marker marker) { return false; } @Override public void warn(Marker marker, String s) { } @Override public void warn(Marker marker, String s, Object o) { } @Override public void warn(Marker marker, String s, Object o, Object o1) { } @Override public void warn(Marker marker, String s, Object... objects) { } @Override public void warn(Marker marker, String s, Throwable throwable) { } @Override public boolean isErrorEnabled() { return false; } @Override public void error(String s) { } @Override public void error(String s, Object o) { } @Override public void error(String s, Object o, Object o1) { } @Override public void error(String s, Object... objects) { } @Override public void error(String s, Throwable throwable) { } @Override public boolean isErrorEnabled(Marker marker) { return false; } @Override public void error(Marker marker, String s) { } @Override public void error(Marker marker, String s, Object o) { } @Override public void error(Marker marker, String s, Object o, Object o1) { } @Override public void error(Marker marker, String s, Object... objects) { } @Override public void error(Marker marker, String s, Throwable throwable) { }}
public class JsonLogger extends LoggerDecorator{ public JsonLogger(Logger logger) { super(logger); } @Override public void info(String s) { JSONObject result = newJsonObject(); result.put("message: ",s); logger.info(result.toString()); } @Override public void error(String s) { JSONObject result = newJsonObject(); result.put("error: ",s); logger.info(result.toString()); } public void error(Exception e){ JSONObject result = newJsonObject(); result.put("exception: ",e); String trace = Arrays.toString(e.getStackTrace()); result.put("starckTrace: ",trace); logger.info(result.toString()); } private JSONObject newJsonObject(){ return new JSONObject(); }}
public class JsonLoggerFactory { public static JsonLogger getLogger(Class clazz){ Logger logger = LoggerFactory.getLogger(clazz); return new JsonLogger(logger); }}
public class Test { //private static final Logger logger = LoggerFactory.getLogger(Test.class); private static final Logger logger = JsonLoggerFactory.getLogger(Test.class); public static void main(String[] args) { logger.error("系统错误"); }}
public abstract class Component { abstract void operation();}
public abstract class Decorator extends Component { //持有组件对象 protected Component component; /** * 构造方法,传入组件对象 * @param component */ public Decorator(Component component){ this.component = component; }; public void operation(){ //转发请求给组件对象,可以在转发前后执行一些附加动作 component.operation(); }}
public class ConcreteComponent extends Component{ @Override void operation() { System.out.println("我是第二级"); }}
public class ConcreteDecoratorA extends Decorator { /** * 构造方法,传入组件对象 * * @param component */ public ConcreteDecoratorA(Component component) { super(component); } private void operationFirst(){ System.out.println("执行前操作A"); };//在调用父类的operation方法之前需要执行的操作 private void operationLast(){ System.out.println("执行后操作A"); };//在调用父类的operation方法之后需要执行的操作 public void operation(){ //调用父类的方法,可以在调用前后执行一些附加动作 operationFirst();//添加的功能 super.operation();//这里可以选择性的调用父类的方法,如果不调用则相当于完全改写了方法, operationLast();//添加的功能 }}
public class ConcreteDecoratorB extends Decorator{ /** * 构造方法,传入组件对象 * * @param component */ public ConcreteDecoratorB(Component component) { super(component); } private void operationFirst(){ System.out.println("执行前操作B"); };//在调用父类的operation方法之前需要执行的操作 private void operationLast(){ System.out.println("执行后操作B"); };//在调用父类的operation方法之后需要执行的操作 public void operation(){ //调用父类的方法,可以在调用前后执行一些附加动作 operationFirst();//添加的功能 super.operation();//这里可以选择性的调用父类的方法,如果不调用则相当于完全改写了方法, operationLast();//添加的功能 }}
public class Client { public static void main(String[] args) { Component component = new ConcreteComponent(); Decorator decoratorA = new ConcreteDecoratorA(component); decoratorA.operation(); Decorator decoratorB = new ConcreteDecoratorB(component); decoratorB.operation(); Decorator decoratorBandA = new ConcreteDecoratorB(decoratorA); decoratorBandA.operation(); }}
转载地址:http://nkjrn.baihongyu.com/