您的位置:首页 > 编程语言 > Java开发

java设计模式学习之装饰者模式

2017-03-08 17:14 337 查看

1.介绍

装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。

假如当我们想给一个类扩展新的方法的时候,常用的做法是新建一个子类,在子类中使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。当我们在不想增加很多子类的情况下使用装饰器模式扩展类,相比生成子类更为灵活。

java的IO流用到了Decortor(装饰)模式。

2.代码说明

假如有一个形状接口Shape,子类Circle实现了画圆的功能,此时我们想扩展画圆的功能,在画圆的同时给圆上色,用装饰器模式实现如下:

先创建形状接口Shape:

package com.tl.skyLine.pattern.DecoratorPattern;

/**
* Created by tl on 17/3/8.
*/
public interface Shape {
void draw();
}


圆形形状:

package com.tl.skyLine.pattern.DecoratorPattern;

/**
* Created by tl on 17/3/8.
*/
public class Circle implements Shape {

@Override
public void draw() {
System.out.println("画一个圆形形状");
}
}


装饰对象Decorator和被装饰对象Circle实现同一个接口,装饰对象Decorator持有被装饰对象Circle的实例:

package com.tl.skyLine.pattern.DecoratorPattern;

/**
* Created by tl on 17/3/8.
*/
public class Decorator implements Shape {
private Circle shape;

public Decorator(Circle shape) {
this.shape = shape;
}

private void fillRed() {
System.out.println("图形被填充为红色!");
}

@Override
public void draw() {
shape.draw();
fillRed();
}
}


测试:

package com.tl.skyLine.pattern.DecoratorPattern;

/**
* Created by tl on 17/3/8.
*/
public class DecoratorTest {
public static void main(String[] args) {

Shape redCircle = new Decorator(new Circle());
redCircle.draw();
}
}


结果:

画一个圆形形状

图形被填充为红色!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: