设计模式-装饰者模式
来源:互联网 发布:什么软件测八卦 编辑:程序博客网 时间:2024/06/05 15:16
众所周知,代码复用是面向对象中非常重要的一个特点。(decorator)装饰者模式也是所有设计模式中非常重要的一个应用。
装饰者模式又名包装器,由此看来,我们初步的猜想是将类一层一层的包装达到一定功能。
首先来看一下结构图
装饰者模式中有四个参与者
1、Component
这是一个对象接口,可以给这些对象动态添加职责。
2、ConcreteComponent
这是对象的实现类
3、Decorator
装饰者接口
4、ConcreteDecorator
具体的装饰类
代码:
public interface Component { void show();}
//具体对象
public class Window implements Component { public void show() { System.out.println("生成个窗口"); }}
//装饰类接口
public abstract class Decorator implements Component{ private Component component; public Decorator(Component component){ this.component = component; } public void show() { this.component.show(); }}
//具体装饰实现类
public class BoardDecorator extends Decorator { public BoardDecorator(Component component) { super(component); } @Override public void show(){ super.show(); drawBoard(); } public void drawBoard(){ System.out.println("我画了一条边"); }}
public class ColorDecorator extends Decorator{ public ColorDecorator(Component component) { super(component); } @Override public void show(){ super.show(); drawColor(); } public void drawColor(){ System.out.println("我涂上了红色"); }}
//将对象进行包装
public class Client { public static void main(String[] args){ Component component = new ColorDecorator(new BoardDecorator(new Window())); component.show(); }}结果:
生成个窗口
我画了一条边
我涂上了红色
可见window类被一层层包装了
在java中也有这样的设计模式出现,比如我们的输入输出流。
例如:
BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(new File("")));
把简单的文件输入流包装成具有缓冲区的输入流。
阅读全文
1 0
- 设计模式-装饰者模式
- 设计模式:装饰者模式
- 设计模式:装饰者模式
- 设计模式: 装饰者模式
- 设计模式--装饰者模式
- 设计模式-装饰者模式
- 设计模式--装饰者模式
- 设计模式-装饰者模式
- 设计模式------------装饰者模式
- 设计模式--装饰者模式
- 设计模式:装饰者模式
- 设计模式-装饰者模式
- 设计模式-装饰者模式
- 设计模式-装饰者模式
- 设计模式--装饰者模式
- 【设计模式】装饰者模式
- 设计模式---装饰者模式
- 设计模式 装饰者模式
- 关于eventmachine,协程在rails里面的使用
- 单链表的测长和打印和节点查找、插入、删除、逆置
- 【图论经典题】Prison Break
- 快捷键 变量 内外类 加号重载20170719
- java程序员的python之路(线程)
- 设计模式-装饰者模式
- palindromeNumber
- Java实训第8天(面向对象)
- 访问权限修饰符(4个),继承的补充;抽象(abstract)、学习笔记
- 利用InetAddress.getByName()来产生你的IP地址
- 数据结构(第三天)栈的链式存储
- Linux硬链接和软链接
- 【solr】solr介绍
- tracker.cpp