Ejemplo n.º 1
0
///Decorator 装饰者模式提供了一种给类增加职责的方法,不是通过继承实现的,而是通过组合。
///动态地给一个对象添加一些额外的职责或者行为。就增加功能来说, Decorator模式相比生成子类更为灵活。
///它是通过创建一个包装对象,也就是装饰来包裹真实的对象
///Decorator 模式除了采用组合的方式取得了比采用继承方式更好的效果,Decorator 模式 还给设计带来一种“即用即付”的方式来添加职责
///Decorator 模式和 Proxy 模式的相似的地方在于它们都拥有一个指向其他对象的引用
///为了多态,通过父类指针指向其具体子类,但是这就带来另外一个问题,当具体子类要添加 新的职责,就必须向其父类添加一个这个职责的抽象接口,否则是通过父类指针是调用不到 这个方法了。这样处于高层的父类就承载了太多的特征(方法),并且继承自这个父类的所 有子类都不可避免继承了父类的这些接口,但是可能这并不是这个具体子类所需要的。而在 Decorator 模式提供了一种较好的解决方法,当需要添加一个操作的时候就可以通过 Decorator 模式来解决,你可以一步步添加新的职责。
///透明性使得你可以递归的嵌套多个装饰,从而可以添加任意多的功能
///以下情况使用Decorator模式
///1.在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
///2 处理那些可以撤消的职责。
///3.当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展
void DecoratorTest() {
    ::Component* com = new ConcreteComponent();
    Decorator* dec = new ConcreteDecorator(com);
    dec->Operation();
    delete com;
    delete dec;
}
int main(int argc, char* argv[]) {
  Component* com = new ConcreteComponent();
  Decorator* dec = new ConcreteDecorator(com);
  dec->Operation();
  delete dec;
  return 0;
}
Ejemplo n.º 3
0
int main(){
    Component* pComponent = new ConcreateComponent();
    cout << "aaaaaaaaaaaa\n";
    Decorator* pDecorator = new ConcreateDecorator(pComponent);
    cout <<"bbbbbbbbbbbbb\n";
    pDecorator->Operation();
    cout <<"cccccccccccc\n";
    delete pDecorator;

    return 0;
}
Ejemplo n.º 4
0
int main()
{
    // 初始化一个Component对象
    Component* pComponent = new ConcreateComponent();
    // 采用这个Component对象去初始化一个Decorator对象,
    // 这样就可以为这个Component对象动态添加职责
    Decorator* pDecorator = new ConcreateDecorator(pComponent);
    pDecorator->Operation();

    delete pDecorator;
    return 0;
}
Ejemplo n.º 5
0
int main()
{
	// initialize a Componentt object
	Componentt* pComponent = new ConcreteComponent();
	// initialize a Decorator object through the Componentt object.
	// so the decorator could dynamically add behavior for Componentt.
	Decorator* pDecorator = new ConcreteDecorator(pComponent); 

	pDecorator->Operation(); 
	delete pDecorator;

	system("pause"); 
	return 0; 
}
Ejemplo n.º 6
0
int main(int argc, char **argv)
{
	LoadData::LoadSuang();
	
    Component* pComponentObj = new ConcreteComponent();
	Decorator* pTongJi = new TongJi(pComponentObj);
	
	

	
	
	
	
	pTongJi->Operation();
	
	std::cout<<"TongJi"<<std::endl;
	
	for(int i = 0; i < 10; i++)
	{
		
		S_suang data;
		GetOneShuang(data);
		data.Print();
	}
	
	
	
	return 0;
	
	
    //Decorator *pDecoratorAOjb = new ConcreteDecoratorA(pComponentObj);
    /* pDecoratorAOjb->Operation();
    std::cout<<"============================================="<<std::endl;
    Decorator *pDecoratorBOjb = new ConcreteDecoratorB(pComponentObj);
    pDecoratorBOjb->Operation();
    std::cout<<"============================================="<<std::endl; */
    //Decorator *pDecoratorBAOjb = new ConcreteDecoratorB(pDecoratorAOjb);
    //pDecoratorBAOjb->Operation();
    //std::cout<<"============================================="<<std::endl;
	
	
	/* for(int i = 0; i < 10; i++)
	{
		std::cout<<GetOneNumber(1, 32)<<std::endl;
	} */
	

	
} 
Ejemplo n.º 7
0
int main(int argc, char const *argv[])
{
	//调用方法1
	Component *com=new ConComponent();
	//Decorator *dec=new ConDecorator(com);
	Decorator *ss= new ConDecoratorB(com);

	ss->Operation();
	cout<<"--------------"<<endl;

	//调用方法2
	Decorator *dd = new ConDecorator( new ConDecoratorB( new ConComponent()));
	
	dd->Operation();

	delete ss;
	delete dd;

	return 0;
}