您的位置:首页 > 其它

decorator设计模式一个实例

2005-05-25 02:37 429 查看
我们需要两个类 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");
 }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐