《五》设计模型 装饰模式 Decorator

下面为装饰模式实现的demo,装饰模式中一定包含一个基类的指针在这里插入图片描述

//*.hpp
#pragma once
#include <stdio.h>

class Stream    //流基类 
{
public:
    //IO流接口
	virtual char Read(int number) = 0;
    virtual void Seek(int position) = 0;
    virtual void Write(int data) = 0;

    //虚析构保证子类析构能被调用
    virtual ~Stream(){}
};

//网络流
class NetworkStream :public Stream
{
public:
    virtual char Read(int number)
    {
        printf("NetworkStream read\n");
    }
    virtual void Seek(int position)
    {
        printf("NetworkStream Seek\n");
    }
    virtual void Write(int data)
    {
        printf("NetworkStream Write\n");
    }
};

//文件流
class FileStream :public Stream
{
public:
    virtual char Read(int number)
    {
        printf("FileStream Read\n");
    }
    virtual void Seek(int position)
    {
        printf("FileStream Seek\n");
    }
    virtual void Write(int data)
    {
        printf("FileStream Write\n");
    }
};

//内存流
class MemoryStream :public Stream
{
public:
    virtual char Read(int number)
    {
        printf("MemoryStream Read\n");
    }
    virtual void Seek(int position)
    {
        printf("MemoryStream Seek\n");
    }
    virtual void Write(int data)
    {
        printf("MemoryStream Write\n");
    }
};

//扩展操作
//中间类
class DecoratorStream :public Stream
{
protected:
    Stream * stream;
    DecoratorStream(Stream* str):stream(str)
    {}
};

//加密
class CryptoStream :public DecoratorStream
{

public:
    CryptoStream(Stream* str):DecoratorStream(str)
    {}
    virtual char Read(int number)
    {
        printf("CryptoStream Read\n");
        stream->Read(number);
    }
    virtual void Seek(int number)
    {
        printf("CryptoStream Seek\n");
        stream->Seek(number);
    }
    virtual void Write(int number)
    {
        printf("CryptoStream Write\n");
        stream->Write(number);
    }

};
//缓冲区
class bufferedStream :public DecoratorStream
{
public:
    bufferedStream(Stream* str):DecoratorStream(str){}
    virtual char Read(int number)
    {
        printf("bufferedStream Read\n");
        stream->Read(number);
    }
    virtual void Seek(int number)
    {
        printf("bufferedStream Seek\n");
        stream->Seek(number);
    }
    virtual void Write(int number)
    {
        printf("bufferedStream Write\n");
        stream->Write(number);
    }

};
#include "test.hpp"
int main()
{
    FileStream * s1 = new FileStream();
    printf("````````````````````````````file```````````````````````````````````\n");

    s1->Read(1);
    s1->Seek(1);
    s1->Write(1);
    printf("```````````````````````````````````````````````````````````````\n");
    CryptoStream *s2 = new CryptoStream(s1);
    s2->Read(1);
    s2->Seek(1);
    s2->Write(1);
    printf("```````````````````````````````````````````````````````````````\n");
    bufferedStream *s3 = new bufferedStream(s2);
    s3->Read(1);
    s3->Seek(1);
    s3->Write(1);
    printf("```````````````````````````````````````````````````````````````\n");
    
    printf("```````````````````````````````````````````````````````````````\n");
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值