decorator

本文通过一个具体的例子展示了装饰者模式在C++中的实现过程。该模式允许在不修改原始类的情况下增加职责或行为,通过继承和组合的方式,将额外的功能附加到对象上。文章详细解释了如何使用装饰者模式来扩展销售票据打印功能。

#include <iostream>
using namespace std;
class Component
{
public:
  virtual void prtTicket() = 0;
};
class SalesTicket:public Component
{
public:
  void prtTicket()
  {
    cout << "SalesTicket::PrtTicket"  << endl;
  }
};
class Decorator : public Component
{
public:
  void prtTicket()
  {
    if (myComp != 0)
      myComp->prtTicket();
  }
  Decorator( Component *myC)
  {
    myComp = myC;
  }
private:
  Component * myComp;
};
class Header1 : public Decorator
{
public:
  Header1(Component *myC):Decorator(myC){}
  void prtTicket()
  {
    cout << "Header1" << endl;
    Decorator::prtTicket();
  }
};
class Header2 : public Decorator
{
public:
  Header2(Component *);
  void prtTicket()
  {
    cout << "Header2" << endl;
    Decorator::prtTicket();
  }
};
class Footer1 : public Decorator
{
public:
  Footer1(Component *myC):Decorator(myC){}
  void prtTicket()
  {
    Decorator::prtTicket();
    cout << "Footer1" << endl;
  }
};
class Footer2 : public Decorator
{
public:
  Footer2(Component *);
  void prtTicket()
  {
    Decorator::prtTicket();
    cout << "Footer2" << endl;
  }
};
class Configuration
{
private:
  Header1 *hd1;
  Header2 *hd2;
  Footer1 *ft1;
  Footer2 *ft2;
public:
  Configuration()
  {
    /*
    hd1 = new Header1;  //
    hd2 = new Header2;
    ft1 = new Footer1;
    ft2 = new Footer2;*/
  }
  ~Configuration()
  {
    /*  
    delete hd1;
    delete hd2;
    delete ft1;
    delete ft2;*/
  }
public:
  static Component* getsalesTicket()
  {
     return new Header1(
                 new Footer1(
         new SalesTicket
     )
             );
  }
};

class SalesOrder
{
public:
  void prtTicket()
  {
    Component *myST;
    myST = Configuration::getsalesTicket();
    myST->prtTicket();
  }
};
using namespace std;
int
main()
{
   SalesOrder so;
   so.prtTicket();
  //Header1 * hd1 = new Header1(new SalesTicket);
  return 0;
}

在编程中,装饰器(Decorator)是一种设计模式,允许在不修改原始对象或函数的情况下为其添加新功能。这一模式广泛应用于Python等语言中,通过装饰器可以实现对函数或类的增强,而无需修改其源代码。装饰器的核心思想是将一个函数或类作为参数传递给另一个函数(装饰器),然后返回一个增强后的版本。这种机制极大地提高了代码的复用性和可读性。 ```python def my_decorator(func): def wrapper(): print("Before function call") func() print("After function call") return wrapper @my_decorator def say_hello(): print("Hello") say_hello() ``` 上述示例展示了如何使用装饰器来增强函数的功能。`my_decorator` 是一个装饰器函数,它接收一个函数 `func` 作为参数,并返回一个新的函数 `wrapper`。`@my_decorator` 语法是应用装饰器的简洁方式,使得 `say_hello` 函数被装饰器增强。 在ARM架构方面,ARM(Advanced RISC Machine)是一种基于精简指令集计算(RISC)原理的处理器架构。ARM架构因其低功耗、高性能的特点,在移动设备、嵌入式系统等领域得到了广泛应用。ARM架构支持多种操作系统,包括Android、Linux等,同时也支持多种编程语言的开发,如C/C++、Python等。 对于ARM架构的开发,开发者需要注意以下几点: - **编译器选择**:针对ARM架构,可以选择GCC等编译器进行程序编译。 - **交叉编译**:由于ARM设备通常不具备强大的编译环境,开发者常常需要在x86架构的主机上进行交叉编译。 - **性能优化**:利用ARM架构的特性,如NEON技术进行多媒体处理优化。 - **内存管理**:考虑到ARM设备的内存限制,优化内存使用对于提高应用性能至关重要。 ```bash # 示例:使用GCC进行交叉编译 arm-linux-gnueabi-gcc -o hello hello.c ``` 上述命令展示了如何使用GCC工具链对C语言编写的程序进行交叉编译,生成适用于ARM架构的目标文件。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值