Java实现装饰者模式
2021-08-01 07:56
标签:block 就是 关闭 tor pre 类对象 new 避免 javac 装饰者模式(Decorator或Wrapper) 被装饰者将扩展功能的任务委托给装饰者,从而避免直接修改原来的类(开闭原则:对扩展开放,对修改关闭) 装饰者与被装饰者拥有同样的超类型 装饰者可以在被装饰者的行为前或行为后,增加自己的行为 装饰者模式说白了,就是在装饰者类中持有超类对象,增强超类对象的功能,或者进行扩展(虽然极其简单,但是很有用)。 Java io包中的包装流就用到了装饰者模式,用来扩展基础流的功能。 装饰者模式示例: 小白程序员一开始啥都不会 public class Coder { public double getSalary() { return 0; } public String getSkill() { return "啥也不会"; } } 私下琢磨了一天后,学会了HelloWorld(增强了超类功能,但没有修改超类中的代码) public class HelloWorldCoder extends Coder { private Coder coder; public HelloWorldCoder(Coder coder) { this.coder = coder; } @Override public double getSalary() { return coder.getSalary()+100; } @Override public String getSkill() { return coder.getSkill()+",会写HelloWorld了"; } } 通过阅读《Java从入门到精通》,小白终于精通了Java,顺便学会了CRUD public class JavaCoder extends Coder { private Coder coder; public JavaCoder(Coder coder) { this.coder = coder; } @Override public double getSalary() { return coder.getSalary()+1000; } @Override public String getSkill() { return coder.getSkill()+",精通Java"; } // 扩展功能 public void curd() { System.out.println("会写增删改查了"); } } 小白还在不停的学习新的技能... 测试 public static void main(String[] args) { Coder coder=new Coder(); System.out.println(coder.getSalary()); System.out.println(coder.getSkill()); Coder helloworldCoder=new HelloWorldCoder(coder); System.out.println(helloworldCoder.getSalary()); System.out.println(helloworldCoder.getSkill()); Coder javaCoder=new JavaCoder(helloworldCoder); System.out.println(javaCoder.getSalary()); System.out.println(javaCoder.getSkill()); // 使用扩展(装饰类特有)的功能 JavaCoder crudCoder= (JavaCoder)javaCoder; crudCoder.curd(); } 输出 0.0 啥也不会 100.0 啥也不会,会写HelloWorld了 1100.0 啥也不会,会写HelloWorld了,精通Java 会写增删改查了 Java实现装饰者模式标签:block 就是 关闭 tor pre 类对象 new 避免 javac 原文地址:https://www.cnblogs.com/lypzzzzz/p/14961140.html