(四)适配器模式。
主要是为了统一接口,处理接口不匹配的问题。使函数在调用时简单,将某个类的接口转换成另一个客户期待的接口,实现了接口不匹配的类间通信,实现了软件的复用。
(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;
}
};