decorator设计模式一个实例

原创 2005年05月25日 02:37:00

我们需要两个类 MemoryStream以及FileStream。他们都具有两个成员函数  PutInt 以及 PutString。用户调用这两个函数分别用来向MemoryStream或者FileStream中写入一个整数或者一个字符串。MemoryStream以及FileStream负责将写入的数据以字节流的方式存放在内存或者磁盘上。
        应用户要求,我们需要在将这些字节流写入内存或者磁盘上之前,做以下可能的操作:(1)自己设计压缩算法,进行压缩处理;(2)将一个二进制字节用两个字符表示,这两个字符恰好是该字节的16进制字符。比如字节“/xAB”会被转化为字符“A”“B”; (3) 进行和(2)相反的过程:将两个16进制的字符转化为一个二进制字节;(4)将字节流中的“/x0d /x0a”(Windows环境下的换行符)转化为“/x0a”(Unix环境下的换行符);(5)将字节流中的“/x0a”转化为“/x0d /x0a”。

//author:张安春
import java.io.*;
abstract class Stream{
 public abstract void putInt(int i);
 public abstract void putString(String str);
}

class FileStream extends Stream{
 public FileStream(){}
 public void putInt(int i){
  System.out.println("FileStream put "+ i);
 }
 public void putString(String str){
  System.out.println("FileStream put " + str);
 }
}

class MemoryStream extends Stream{
 public MemoryStream(){}
 public void putInt(int i){
  System.out.println("MemoryStream put "+ i);
 }
 public void putString(String str){
  System.out.println("MemoryStream put " + str);
 }
}

abstract class Decorator extends Stream{
 protected Stream pStream;
 public Decorator(Stream pStream){
  this.pStream = pStream;
 }
 public void putInt(int i){
  pStream.putInt(i);
 }
 public void putString(String str){
  pStream.putString(str);
 }
}

class Compress extends Decorator{
 public Compress(Stream pStream){
  super(pStream);
 }
 public void putInt(int i){
  System.out.println("Compress " + i + " now");
  super.putInt(i);
 }
 public void putString(String str){
  System.out.println("Compress " + str + " now");
  super.putString(str);
 }
}

class Byte2Hex extends Decorator{
 public Byte2Hex(Stream pStream){
  super(pStream);
 }
 public void putInt(int i){
  System.out.println("Byte2Hex " + i + " now");
  super.putInt(i);
 }
 public void putString(String str){
  System.out.println("Byte2Hex " + str + " now");
  super.putString(str);
 }
}

class Hex2Byte extends Decorator{
 public Hex2Byte(Stream pStream){
  super(pStream);
 }
 public void putInt(int i){
  System.out.println("hex2Byte " + i + " now");
  super.putInt(i);
 }
 public void putString(String str){
  System.out.println("hex2Byte " + str + " now");
  super.putString(str);
 }
}

class DA2A extends Decorator{
 public DA2A(Stream pStream){
  super(pStream);
 }
 public void putInt(int i){
  System.out.println("DA2A " + i + " now");
  super.putInt(i);
 }
 public void putString(String str){
  System.out.println("DA2A " + str + " now");
  super.putString(str);
 }
}

class A2DA extends Decorator{
 public A2DA(Stream pStream){
  super(pStream); 
 }
 public void putInt(int i){
  System.out.println("A2DA " + i + " now");
  super.putInt(i);
 }
 public void putString(String str){
  System.out.println("A2DA " + str + " now");
  super.putString(str);
 }
}

public class TestDecorator{
 public static void main(String args[]){
  FileStream fs=new FileStream();
  MemoryStream ms = new MemoryStream();
  
  Compress compress = new Compress(new FileStream());
  Byte2Hex b2h = new Byte2Hex(new MemoryStream());
  
  Hex2Byte h2b = new Hex2Byte(
       new DA2A(
        new Compress(
         new FileStream())));
  A2DA a2da = new A2DA(
       new Byte2Hex(
        new MemoryStream()));
  h2b.putInt(10);
  h2b.putString("UML");
  System.out.println();
  a2da.putInt(10);
  a2da.putString("OOP");
 }
}

java相关优秀微信公众号推荐

java相关优秀微信公众号推荐 转载请注明出处:http://blog.csdn.NET/u014731752/article/details/72932036 转载请注明出处:http:...

设计模式与实例代码:Decorator模式

意图/定义:动态地给一个对象添加一些额外的职责,而这些职责可能以任意的顺序来添加,从而提供了比生成子类更灵活的方法来添加功能 问题:要使用的对象可以提供所需的功能,但可能要为这个对象添加某些功能,这...
  • zzulp
  • zzulp
  • 2012年04月01日 01:11
  • 683

简单Java代码实例助你通俗易懂的理解什么是装饰(者)设计模式 (Decorator)

首先抛开到处都有的文字概念。来看下面的例子。 现在以:人吃饭。这个需求为例。来讲解这个设计模式。 1.0:想当年,人们都比较朴实。吃饭就是简简单单的吃饭。 那么PersonBefore类里面一个简单的...

Net设计模式实例之装饰者模式(Decorator Pattern)

一、装饰模式简介(Brief Introduction) 动态地给一个对象添加一些额外的职责。 优点:把类中的装饰功能从类中搬移出去,这样可以简化原有的类。有效地把类的核心功能和装饰功能区分开了。...
  • my98800
  • my98800
  • 2017年01月14日 12:56
  • 132

设计模式实例(Lua)笔记之七(Decorator模式)

1.描述 就说说"我"上小学的的糗事吧。我上小学的时候学习成绩非常的差,班级上 40 多个同学,我基本上都是在排名 45 名以后,按照老师给我的定义就是“不是读书的料”,但是我老爸管的很严格,明知道我...

大话设计模式--装饰者模式 Decorator -- C++实现实例

1.装饰者模式 Decorator 动态地给一个对象添加一个额外的职责, 就添加功能来说, 装饰模式比生成子类更为灵活。 每个装饰对象的实现和如何使用这个对象分离,  每个装饰对象只关心自己的功能,不...

每天一个设计模式之Decorator模式解决类间组合爆炸问题

模式动机Decorator模式是一种相对简单的对象结构性模式,动态和对象是个对应的关系,正如静态和类这样的对应关系,编译时能够决定的特质是静态特质,动态则表示在运行时进行操作,传统情况下使用的继承是静...

Android设计模式之一个例子让你彻底明白装饰者模式(Decorator Pattern)

转载:http://www.2cto.com/kf/201512/455764.html 这篇文章中我不会使用概念性文字来说明装饰者模式,因为通常概念性的问题都很抽象,很难懂,使得读者很难明白到底为...

Android设计模式之一个例子让你彻底明白装饰者模式(Decorator Pattern)

导读这篇文章中我不会使用概念性文字来说明装饰者模式,因为通常概念性的问题都很抽象,很难懂,使得读者很难明白到底为什么要使用这种设计模式,我们设计模式的诞生,肯定是前辈们在设计程序的时候遇到了某种困难,...

设计模式之装饰者(Decorator)

  • 2007年09月27日 14:38
  • 316KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:decorator设计模式一个实例
举报原因:
原因补充:

(最多只允许输入30个字)