java装饰模式学习记录
来源:互联网 发布:手机小说码字软件 编辑:程序博客网 时间:2024/06/16 08:02
@装饰模式 属于结构型模式
定义:装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
要记住两点:可以动态的添加新的功能,同时又不改变原有结构(开闭原则)。要先添加新的功能又不改变原来的类,那我们怎么办呢?那我就新建一个类,这个类实现接口,还持有接口的引用。
我们要记住这里的实现接口和接口引用。如下接口
public interface Shape {void draw();}
在这个接口的继承链中我可以先看到两条。这两条分别是实现了这个接口的Shape——Rectangle和Shape——Circle。下面代码
public class Rectangle implements Shape{public void draw(){System.out.println("Shape:Rectangle");}}
public class Circle implements Shape {@Overridepublic void draw() {// TODO Auto-generated method stubSystem.out.println("Shape:Circle");}}
上面的很容易理解,但是现在有一个情况就是要我们打印出Rectangle和Circle边界的颜色,但是我们没有办法修改上面的代码。这时候我们就要用到装饰者模式。
添加新的功能,打印边界的颜色,note:这里添加新功能不是在上面的代码中添加,不然就违背了开闭原则.我们要新建一个类ShapeDecorator (形状装饰者类)
代码如下
/** * * @author huxiongda *抽象装饰模式 */public abstract class ShapeDecorator implements Shape{protected Shape decoratorShape;public ShapeDecorator(Shape decoratorShape){this.decoratorShape=decoratorShape;}public void draw(){decoratorShape.draw();}}
一看也很简单对吧,此时有了第三条继承链,分析下 上面的抽象类实现了Shape接口,重写了draw()方法,构造器中持有一个shape引用。在这里我们没有看到添加的功能,因为在下面的代码中
/** * * @author huxiongda *具体装饰模式 */public class RedShapeDecorator extends ShapeDecorator{public RedShapeDecorator(Shape decoratorShape) {super(decoratorShape);// TODO Auto-generated constructor stub}//重写draw方法//并且在里面添加新的方法,从而遵守开闭原则public void draw(){decoratorShape.draw();setRedBorder(decoratorShape);}private void setRedBorder(Shape decoratorShape){System.out.println("Border Color:Red");}}
RedShapeDecorator(红色形状装饰者类)这个类不再是抽象类,在draw方法里面添加了打印边界颜色代码功能。
所有的代码都写完了,接下来就是写测试类
** * * @author huxiongda *j */public class DecoratorPatternDemo {public static void main(String[] args) {Shape circle =new Circle();Circle circles=new Circle();Shape redCircle=new RedShapeDecorator(new Circle());Shape redRectangle=new RedShapeDecorator(new Rectangle());System.out.println("Circle with normal border");circle.draw();circles.draw();System.out.println("\nCircle of red border");redCircle.draw();System.out.println("\nRectangle of red border");redRectangle.draw();}}
在来看下输出结果:
Circle with normal border
Shape:Circle
Shape:Circle
Circle of red border
Shape:Circle
Border Color:Red
Rectangle of red border
Shape:Rectangle
Border Color:Red
Shape:Circle
Shape:Circle
Circle of red border
Shape:Circle
Border Color:Red
Rectangle of red border
Shape:Rectangle
Border Color:Red
阅读全文
0 0
- java装饰模式学习记录
- Java学习之装饰模式
- Java-装饰模式简单学习
- java模式之装饰模式的学习
- 《JAVA与模式》学习之装饰模式
- Decorator装饰器模式Java示例学习
- Decorator装饰器模式Java示例学习
- Java IO学习【10】装饰设计模式
- JAVA学习之装饰者模式
- 《Java与模式》学习笔记之三-----装饰(Decorator)模式
- java 设计模式 学习笔记(5) 装饰模式
- 《java与模式》学习系列——装饰模式
- java 设计模式学习笔记九 decorator装饰模式
- 设计模式学习笔记---装饰模式decorator(Java版)
- java设计模式学习之装饰者模式
- Java设计模式之装饰模式分享学习
- 学习、探究Java设计模式——装饰者模式
- Java设计模式学习09——装饰模式
- 编程题【字符集合】
- Dukemann聚焦:人工智能技术以及机器智能将对商业智能带来的影响
- 51Nod-1237-最大公约数之和 V3
- 使用CSS3实现树形控件
- 单页面应用程序
- java装饰模式学习记录
- Android 中的 R.class,减小 Apk 包大小
- HDU
- 网易2017春招笔试<双核处理>Java代码
- windows获取时间API
- MySQL Profiling 的使用
- SSH问题
- zcmu-1958
- 多目标优化系列(二)SMS-EMOA