zoukankan      html  css  js  c++  java
  • 设计模式学习笔记(四、结构型-装饰模式)

    目录:

    • 什么是装饰模式
    • 为什么要有装饰模式
    • 如何实现一个装饰模式

    什么是装饰模式

    为了增强一个类我们通常的做法是继承它,并对其功能扩展。但这种方式在原始类拥有较多子类时,会引发继承链路过于复杂,导致难以维护。

    在JKD IO中,为了避免继承链路复杂的情况,使用了装饰模式。

    如InputStream的实现类FilterInputStream,它的增强类BufferedInputStream并不是单单的继承FilterInputStream对其增强,而是在函数中使用InputStream入参达到使用复合来增强FilterInputStream。

    1 InputStream in = new FileInputStream("/test.txt");
    2 InputStream bin = new BufferedInputStream(in);
    3 byte[] data = new byte[128];
    4 while (bin.read(data) != -1) {
    5     // dosomething
    6 }

    终上所述,装饰模式就是不改变原始类(被装饰类)代码结构,而进行相关功能增强的一种设计模式。

    它和代理模式非常的向,但装饰模式解决的问题是原始类的相关功能扩展,而代理模式解决的是非相关功能扩展

    为什么要有装饰模式

    解决继承链路过于复杂的增强模式。

    如何实现一个装饰模式

     1 // 装饰器模式的代码结构(下面的接口也可以替换成抽象类)
     2 public interface IA {
     3     void f();
     4 }
     5 
     6 public class A impelements IA {
     7     public void f() { //... }
     8 }
     9 
    10 public class ADecorator impements IA {
    11     private IA a;
    12     public ADecorator(IA a) {
    13         this.a = a;
    14     }
    15   
    16     public void f() {
    17         // 功能增强代码
    18         a.f();
    19         // 功能增强代码
    20     }
    21 }
  • 相关阅读:
    VECTOR的用法
    【转】C/C++中的Split函数(字符串自动分割)
    【转】动态树
    【实验】vector性质
    【转】Android操作系统安全研究系列——键盘记录
    D8神贴
    【操作系统】修改WIN7下的文件关联与默认程序
    【转】探寻C++最快的读取文件的方案(方法未论证)
    如何在60分钟之内过掉600个单词
    【转】动态树:实现
  • 原文地址:https://www.cnblogs.com/bzfsdr/p/12662924.html
Copyright © 2011-2022 走看看