装饰器模式

装饰器模式是GOF23种设计模式中较为常用的一种模式。它可以实现对原有类的包装和装饰,使新的类具有更强的功能。

 

我这里有智能手机Iphone, 我们可以通过加装投影组件,实现原有手机功能的扩展。这就是一种“装饰器模式”。 我们在未来普通人加装“外骨骼”装饰,让普通人具有力扛千斤的能力,也是一种“装饰器模式”。

      【图】 手机经过投影套件“装饰后”,成为功能更强的“投影手机”

【示例1】装饰器模式代码

package com.bjsxt.io;

 

/**

 * 测试装饰器模式

 * @author 尚学

 *

 */

public class TestDecoration{

    public static void main(String[] args) {

        Iphone    phone = new Iphone("iphone30");

        phone.show();

        System.out.println("===============装饰后");

        TouyingPhone  typhone = new TouyingPhone(phone);

        typhone.show();

    }

}

 

 

 

 class Iphone {

    private String    name;

   

    public Iphone(String name){

        this.name = name;

    }

   

    public void show(){

        System.out.println("我是"+name+",可以在屏幕上显示");

    }

   

}

 

class TouyingPhone {

    public Iphone phone;

    public TouyingPhone(Iphone p){

        this.phone = p;

    }

   

    //功能更强的方法

    public void show(){

        phone.show();

        System.out.println("还可以投影,在墙壁上显示");   

    }

   

}

IO流体系中使用装饰器模式

IO流体系中大量使用了装饰器模式,让流具有更强的功能、更强的灵活性。比如:

FileInputStream  fis = new FileInputStream(src);

BufferedInputStream  bis = new BufferedInputStream(fis);

 

显然BufferedInputStream装饰了原有的InputStream,让普通的InputStream也具备了缓存功能,提高了效率。 大家举一反三,可以翻看本章代码,看看还有哪些地方使用了装饰器模式。




「全栈Java笔记」是一部能帮大家从零到一成长为全栈Java工程师系列笔记。笔者江湖人称 Mr. G,10年Java研发经验,曾在神州数码、航天院某所研发中心从事软件设计及研发工作,从小白逐渐做到工程师、高级工程师、架构师。精通Java平台软件开发,精通JAVAEE,熟悉各种流行开发框架。


  笔记包含从浅入深的六大部分:

  A-Java入门阶段

  B-数据库从入门到精通

  C-手刃移动前端和Web前端

  D-J2EE从了解到实战

  E-Java高级框架精解

  F-Linux和Hadoop