#include <iostream>
#include <memory>
class SubSystemInterface{
public:
virtual ~SubSystemInterface( void ) {}
virtual void SubProc1st( void ) = 0;
virtual void SubProc2nd( void ) = 0;
virtual void SubProc3rd( void ) = 0;
};
class ConcreteSubSystem : public SubSystemInterface{
public:
virtual void SubProc1st( void ) override{
puts("ConcreteSubSystem SubProc 1st onProc");
}
virtual void SubProc2nd( void ) override{
puts("ConcreteSubSystem SubProc 2nd onProc");
}
virtual void SubProc3rd( void ) override{
puts("ConcreteSubSystem SubProc 3rd onProc");
}
};
class ConcreteSubSystemAbstractFactory{
public:
SubSystemInterface *CreateSubSystem( void ) const{
return new ConcreteSubSystem;
}
~ConcreteSubSystemAbstractFactory( void ){
puts("factory destructed");
}
};
class Facade{
protected:
SubSystemInterface *PolymorphicSubSystemPointer;
public:
Facade( const ConcreteSubSystemAbstractFactory *factory )
:PolymorphicSubSystemPointer( factory->CreateSubSystem() ) {}
void AService1st( void ){
std::clog << "service 1st provided by facade for client\n";
PolymorphicSubSystemPointer->SubProc1st();
PolymorphicSubSystemPointer->SubProc3rd();
puts("service 1st over");
}
void Aservice2nd( void ){
std::clog << "service 2nd provided by facade for client\n";
PolymorphicSubSystemPointer->SubProc3rd();
PolymorphicSubSystemPointer->SubProc2nd();
puts("service 2nd over");
}
};
class Client{
public:
void AnOperation( void ){
std::shared_ptr< ConcreteSubSystemAbstractFactory >
factory( new ConcreteSubSystemAbstractFactory );
Facade facade( factory.get() );
facade.AService1st();
puts("-------------");
facade.Aservice2nd();
puts("-------------");
}
};
int main( void ){
Client clien;
clien.AnOperation();
std::cin.get();
return 0;
}
【设计模式:facade pattern】
最新推荐文章于 2024-07-30 23:20:03 发布