装饰器模式
来源:互联网 发布:p2p网络借贷论文 编辑:程序博客网 时间:2024/06/11 05:24
装饰器模式
单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。
核心
把一个类中的核心职责和装饰功能分开,被装饰对象当做参数传入装饰者对象。动态地给一个对象添加一些额外的职责。
好处
装饰类和被装饰类可以独立发展,不会相互耦合,把类中的装饰功能从类中搬除,简化原有的类,去除相关类中的重复装饰的逻辑。
例子
情景:本类是形状,用颜色装饰类装饰。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。
//创建一个接口public interface Shape{ void draw();}//创造实体类Circle实现接口public class Circle implements Shape { public void draw(){ System.out.println("Shape: Circle"); }}//创建实现接口的实体类Rectanglepublic class Rectangle implements Shape { public void draw(){ System.out.println("Shape: Rectangle"); }}//创建实现了 Shape 接口的抽象装饰类。public abstract class ShapeDecorator implements Shape { protected Shape decoratedShape; public ShapeDecorator(Shape decoratedShape){ this.decoratedShape = decoratedShape; } public void draw(){ decoratedShape.draw(); }}//创建扩展了 ShapeDecorator 类的实体装饰类。public class RedShapeDecorator extends ShapeDecorator{ public RedShapeDecorator(Shape decoratedShape) { super(decoratedShape); } public void draw(){ decoratedShape.draw(); setRedBorder(decoratedShape); } private void setRedBorder(Shape decoratedShape) { System.out.println("Border Color: Red"); }}//最后是客户端程序public class DecoratorPatternDemo { public static void main(String[] args) { Shape circle = new Circle(); Shape redCircle = new RedShapeDecorator(new Circle()); Shape redRectangle = new RedShapeDecorator(new Rectangle()); System.out.println("Circle with normal border"); circle.draw(); System.out.println("\nCircle of red border"); redCircle.draw(); System.out.println("\nRectangle of red border"); redRectangle.draw(); }}//程序输出Circle with normal borderShape: CircleCircle of red borderShape: CircleBorder Color: RedRectangle of red borderShape: RectangleBorder Color: Red
例子来源http://www.runoob.com/design-pattern/decorator-pattern.html
源码在我的代码托管上
装饰者模式
0 0
- c++装饰器模式
- 装饰器模式
- 装饰器模式
- 装饰器(Decorator)模式
- 装饰器模式
- 装饰器模式
- 装饰器模式
- 装饰器模式
- 装饰器模式
- 装饰器模式
- 装饰器(Decorator)模式
- 浅谈装饰器模式
- java 装饰器模式
- 装饰器(Decorator)模式
- 装饰器模式
- 装饰器(Decorator)模式
- 装饰器模式
- 装饰器模式
- Opencv腐蚀-erode函数
- lintcode-最近公共祖先-88
- Android自定义控件——手把手教你写出Google样式的ProgressBar
- apriori算法
- 字符流与字节流的区别
- 装饰器模式
- Opencv膨胀-dilate函数
- 【C#】基础知识—初识C#与.Net
- HDU 5446 2015长春站网络赛1010(数论模板题)
- 天天学设计模式1--重新认识面向对象
- android网络游戏开发——网络通信——回调函数例子
- 黑马程序员-java基础-set集合
- 深入分析Volatile的实现原理,原子操作
- Java中数组中的clone()方法