设计模式- 之我见---创造性(phototype)

来源:互联网 发布:linux idea安装教程 编辑:程序博客网 时间:2024/04/30 09:54

/////////////////////////////////
    
      /*对象创造型模式*/

/////////////////////////////////

#ifndef PT
#define PT
#include "stdafx.h"
class Mission
{
string name;
public:
string * Show();
Mission();
Mission(string );
Mission(Mission &);
Mission *Clone();
virtual~Mission();
};
class PhotoType;

class Client
{
public :
Client();
Client(Mission *);
virtual ~Client();
friend ostream & operator <<(ostream &,Client &);
//protected:
Client * operator()();
private:
string ShowSome();
Mission *m;
};
class PhotoType :public Client
{
public:
Client *Clone();
};
#endif
/////////////////////////////////

/*说明:
     这里phototype是个照片
样的,把对象元素映下来,重新生
成更多的属性未赋值的新对象,
之后再交给其他模式加工*/


/*感觉很鸡肋*/
/////////////////////////////////








// PhotoType.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "PhotoType.h"

Mission::Mission()
{}
Mission::~Mission()
{
}
Client::Client()
{
 
}
Mission::Mission(string s)
{
name = s;
}
Mission::Mission(Mission &m)
{
this->name = m.name ;
}
Mission *Mission::Clone()
{
return new Mission(*this);
}
Client::Client(Mission *m)
{
this->m =m;
}
//Client * Client::operator()(){

//return new Client(p->MakeMission());}

Client::~Client()
{
if (m!=NULL)
delete m;
}
string * Mission::Show()
{
return &name;
}
string Client::ShowSome()
{
return *(m->Show());
}
ostream & operator <<(ostream &o,Client &c)
{
o<<c.ShowSome();
return o;
}

Client *  Client::operator()()
{
return new Client(m);
}
Client *PhotoType::Clone()
{
return (*this)();
}
int _tmain(int argc, _TCHAR* argv[])
{
Client c(new Mission("asd"));
    cout<<c;
//PhotoType p;
cout<<*c();
//p.Clone();
return 0;
}