(转载)Decorator模式---实现一个验证程序 http://hi.baidu.com/huangrg/blog/item/76fe53ddb58169da8d1029c6.html

原创 2007年09月14日 17:47:00
Decorator可以动态地为某个对象增加一些职责.
考虑一个密码验证程序,该程序是一个基于TCP的Client,她的基本功能是发出带有用户名、密码以及其它附加信息的请求给Server,之后得到 Server的回应.而且要求在不同的网络环境中具备不同的安全级别: 0级别,明文传输; 1级别,仅加密密码;2级别,满足1级别的同时,用SSL加密整个数据包。
根据需求可以考虑用Decorator模式进行设计,对1级别和2级别进行修饰。该程序类模型如下:

VerifierComponent:公共接口。
Verifier: 实现了最基本的功能:处理,发送,收回应等。
VerifierDecorator: 修饰类的基类。
EncryptoPwdDecorator: 加密密码的修饰类。
SSLDecorator: 加密整个数据包的修饰类。

根据类模型我们可以容易地实现代码。
说明:
      1)本来代码中都用显示声明,为了缩短代码,将namespace去掉;
      2)真正的程序中有一些附加数据,在例子中不给予体现;
      3) 用输出到控制台的文本来模拟实际动作

      struct VerifierComponent
      {
            virtual void Verify(const string& user, const string& pwd) = 0;
      };

      class Verifier : public VerifierComponent
      {
      public:
             virtual void Verify(const string& user, const string& pwd)
             {
                    cout << "Level0:encode verifier packet;/n";
             }
      };

      class VerifierDecorator : public VerifierComponent
      {
      public:
             VerifierDecorator(VerifierComponent* component)
             {
                   component_ = component;
             }

             virtual void Verify(const string& user, const string& pwd)
             {
                    component_->Verify(user, pwd);
             }
        private:
             VerifierComponent* component_;
        };

        class EncryptoPwdDecorator : public VerifierDecorator
        {
        public:
               EncryptoPwdDecorator(VerifierComponent* component)
                      : VerifierDecorator(component)
               {
               }

               virtual void Verify(const string& user, const string& pwd)
               {
                      VerifierDecorator::Verify(user, pwd);
                      Encrypto();
               }
         private:
                 void Encrypto()
                 {
                        cout << "Level1:encrypto password!/n";
                 }
         };

         class SSLDecorator : public VerifierDecorator
         {
         public:
                SSLDecorator(VerifierComponent* component)
                         : VerifierDecorator(component)
                {
                }

                virtual void Verify(const string& user, const string& pwd)
                {
                       VerifierDecorator::Verify(user, pwd);
                       SSL();
                }
          private:
                void SSL()
                {
                      cout << "Level2.SSL encrpyto packet!/n";
                }
         };


应用"级别2"进行验证的调用代码:
       VerifierComponent* component = new SSLDecorator(new EncryptoPwdDecorator(new Verifier));
       component->Verify("loginer", "123456");


最后补充一下,可以考虑用"Abstract Factory模式"创建Level0,Level1和Level2三种产品。
 

Linux 学习 一 VWare虚拟机 安装 Linux

一、linux 系统的分区 / 根分区  /boot启动分区 /swap内存交换分区 二、vware 虚拟机 nat 方式 虚拟系统上网 安装虚拟机后,会在物理机上自动生成两个 虚拟...
  • timesongjie
  • timesongjie
  • 2011年10月19日 23:20
  • 810

[转载]C++读取Excel文件(97-2000) *.xls

原帖在这里:http://hi.baidu.com/shaka_mabo/blog/item/5d93499b4b997ebdc8eaf436.html                 谢谢这位老兄分...
  • fly_feng
  • fly_feng
  • 2009年05月10日 11:23
  • 5075

wxpython 之 GDI(二)

Point 最简单的几何对象是一个点。它是一个窗口上平面的点。 DrawPoint(int x, int y) #!/usr/bin/python # -*- coding:...
  • Tony_Wong
  • Tony_Wong
  • 2014年01月01日 18:01
  • 1080

(转载)Visitor模式---实现家人行为 http://hi.baidu.com/huangrg/blog/item/aa9e46c7feaeebdfd100608c.html

我家有: 老婆, 儿子, 女儿. 我考虑写一个程序模拟她们的生活. 抽象出老婆,儿子和女儿这三个对象,为了易于统一管理和访问这些对象,同时抽象了一些公共基类:Baby.Baby要提供所有可能的接口. ...
  • huangruiguang
  • huangruiguang
  • 2007年09月14日 17:44
  • 610

http://hi.baidu.com/%BB%A8%D4%E1%C4%C7%D1%AA%BC%C0/profile

http://hi.baidu.com/%BB%A8%D4%E1%C4%C7%D1%AA%BC%C0/profile
  • tianwailaibin
  • tianwailaibin
  • 2011年04月30日 16:14
  • 581

http://hi.baidu.com/sophie198384/blog/item/26960501e9a757021d9583a0.html

http://hi.baidu.com/sophie198384/blog/item/26960501e9a757021d9583a0.html
  • feidegenggao1
  • feidegenggao1
  • 2009年12月30日 15:21
  • 450

http://hi.baidu.com/acrobatuv/blog/item/bc6a76012b38621d4afb512c.html

http://hi.baidu.com/acrobatuv/blog/item/bc6a76012b38621d4afb512c.html
  • ZHPABC
  • ZHPABC
  • 2014年12月22日 16:21
  • 463

Java与模式之装饰(Decorator)模式

装饰(Decorator)模式又名包装(Wrapper)模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。     装饰模式以对客户透明的方式动态地给一个对象附加上更多的...
  • hintcnuie
  • hintcnuie
  • 2016年12月29日 13:36
  • 573

http://hi.baidu.com/kacaca/blog/item/1fd412d644f9f42907088b89.html

红旗Linux6.0 sp1 安装无线网卡 作者:樊冠群 fanguanqun@163.com (转贴请不要删除作者和赞助单位,尊重作者的劳动,谢谢!) (鸣谢壹丰软件赞助www.onefn.cn) ...
  • CHINADENG
  • CHINADENG
  • 2009年12月07日 12:33
  • 896

http://hi.baidu.com/heyg/blog/item/9ca8dcc4785706cb38db4937.html

http://hi.baidu.com/heyg/blog/item/9ca8dcc4785706cb38db4937.html  
  • EndAll
  • EndAll
  • 2007年04月19日 22:38
  • 865
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:(转载)Decorator模式---实现一个验证程序 http://hi.baidu.com/huangrg/blog/item/76fe53ddb58169da8d1029c6.html
举报原因:
原因补充:

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