zoukankan      html  css  js  c++  java
  • 设计模式》装饰器模式

    例子

    • 本地文件,加密装饰器,压缩装饰器
        public interface IDataSource
        {
            /// <summary>
            /// 写入
            /// </summary>
            /// <param name="id"></param>
            /// <param name="data"></param>
            void WriteData(string data);
    
    
            /// <summary>
            /// 读取
            /// </summary>
            /// <param name="id"></param>
            /// <returns></returns>
            string ReadData();
        }
    
        public class FileDataSource : IDataSource
        {
            private readonly string _fileName;
    
            public FileDataSource(string fileName)
            {
                _fileName = fileName;
            }
    
            public void WriteData(string data)
            {
                using var file = File.Open(_fileName, FileMode.OpenOrCreate);
                var bytes = Encoding.UTF8.GetBytes(data);
                file.Write(bytes, 0, bytes.Length);
            }
    
            public string ReadData()
            {
                return File.ReadAllTextAsync(_fileName).Result;
            }
        }
    
        public abstract class DataSourceDecorator : IDataSource
        {
            private readonly IDataSource _dataSource;
    
            public DataSourceDecorator(IDataSource dataSource)
            {
                _dataSource = dataSource;
            }
    
            public virtual void WriteData(string data)
            {
                _dataSource.WriteData(data);
            }
    
            public virtual string ReadData()
            {
                return _dataSource.ReadData();
            }
        }
    
    
        public class EncryptionDecorator : DataSourceDecorator
        {
            public EncryptionDecorator(IDataSource dataSource) : base(dataSource)
            {
            }
    
            private string Encode(string data)
            {
                var bytes = Encoding.UTF8.GetBytes(data);
                return Convert.ToBase64String(bytes);
            }
    
            private string Decode(string data)
            {
                return Encoding.UTF8.GetString(Convert.FromBase64String(data));
            }
    
    
            public override string ReadData()
            {
                var data = base.ReadData();
                string deCodeResult = Decode(data);
                return deCodeResult;
            }
    
            public override void WriteData(string data)
            {
                string enCode = Encode(data);
                base.WriteData(enCode);
            }
        }
    
        public class CompressionDecorator : DataSourceDecorator
        {
            public CompressionDecorator(IDataSource dataSource) : base(dataSource)
            {
            }
    
            public override string ReadData()
            {
                var data = base.ReadData();
                string deCodeResult = CompressHelper.DecompressString(data);
                return deCodeResult;
            }
    
            public override void WriteData(string data)
            {
                string enCode = CompressHelper.CompressString(data);
                base.WriteData(enCode);
            }
        }
    
    
            private static void HardFileTest()
            {
                var file = new FileDataSource("1.txt");
                var encode = new EncryptionDecorator(file);
                var compress = new CompressionDecorator(encode);
                compress.WriteData("123123123");
                Console.WriteLine(compress.ReadData());
            }
    


    参考地址

  • 相关阅读:
    ASP.NET MVC @helper使用说明
    asp.net批量发布博客到各大博客平台
    大型网站架构学习
    Js获取日期时间及其它操作
    Asp.net 后台添加Meta标签方法
    正则表达式排除特定字符串
    asp.net正则表达式过滤标签和数据提取
    <pages validateRequest="false"/>在.net4.0中无效的问题
    IE6、IE7、IE8中overflow:hidden无效问题
    如何在 Django 中保证并发的数据一致性
  • 原文地址:https://www.cnblogs.com/icxldd/p/15799639.html
Copyright © 2011-2022 走看看