学习设计模式基础的心得与代码(二)

来源:互联网 发布:电脑设计房子软件 编辑:程序博客网 时间:2024/05/18 11:05

(四)适配器模式。

主要是为了统一接口,处理接口不匹配的问题。使函数在调用时简单,将某个类的接口转换成另一个客户期待的接口,实现了接口不匹配的类间通信,实现了软件的复用。

(1)对象适配:

类图:

                                                                                       适配

代码:

class Adaptee{
public:
void Adaptee(){
//方法实现 
}
}; 
class Adapter{
public:
void prol();
//声明在对象调用。 
};


(2)指针实现:

类图:

代码:

class  Adapte Base{
public:
virtual void mythind()=0;
virtual~Base(){
cout<<"Base.des"<<endl;

};
class
AdapteA:public Base{
public:
void mythind(){
cout<<"adaptA()"<<endl;
}
~adaptA(){
cout<<"adaptA.des"<<endl;
}
};
class
Adaptee{
public:
void mythind(int i){
cout<<"adapter.d"<<endl;
cout<<i<<endl;
}
~adapter(){
cout<<"adapter.des"<<endl;
}
};
class
AdapteB:public Base{
private:
adapter *p;
public:
adaptB(adapter *t=NULL){
p=t;
}
void mythind(){
int t;
cin>>t;
p->mythind(t);
}
~adaptB(){
cout<<"adapteB.des"<<endl;
delete p;
p=NULL;
}
};

//类C与类A一样,在此省略。

(五)组合模式。

实现了一个树状结构,类似于文件夹的访问创建。

类图:

*多个File和Folder的对象组合至Folder中,形成一个树状结构。

class AbstractFile{
private:string name;
public:
AbstractFile(string t){
name=t;

AbstractFile(){
name="未命名文件"; 
}
virtual void out(){
cout<<name<<" ";
}
virtual void deletes()=0;
virtual ~ AbstractFile(){
cout<<"AbstractFile.des"<<endl;
}
}; 
class File:public AbstractFile{
public:
File(){}
File(string t):AbstractFile(t){}
void out(){
AbstractFile::out();
}
void deletes(){
}
~File(){
cout<<"File.des"<<endl;

};
class Folder:public AbstractFile{
private:
vector<AbstractFile*>vec;
public:
Folder(){}
Folder(string t):AbstractFile(t){}
void Add(AbstractFile*t){
vec.push_back(t);
}
void out(){
AbstractFile::out();
cout<<endl;
vector<AbstractFile*>::iterator i;
for(i=vec.begin();i!=vec.end();i++){
(*i)->out();
}
}
void deletes(){
vector<AbstractFile*>::iterator i;
for(i=vec.begin();i!=vec.end();i++){
(*i)->deletes();
delete (*i);
}
}
~Folder(){
cout<<"Filder.des"<<endl; 
}
};


0 0
原创粉丝点击