这两种模式很像, 都是将一个复杂的流程统一用一个方法进行包装, 方便外界使用.
建造者模式更像是 外观模式的一种特里, 只对一个类的复杂初始化流程进行包装
建造者模式
简介
: 就是一个类的构造方法可能很复杂, 由于系统的限制等原因, 可能很多初始化逻辑不能放在构造函数里, 所以就需要一个类来统一这种构建流程, 让外界不需要知道具体的复杂构造逻辑, 就能获取目标类的实例.
代码
class Building
{
private:string foundation;string main_wall;string floor;
public:Building() {};void build_foundation() { cout << "must be first step" << endl;foundation = "create_foundation"; }void build_main_wall() { cout << "must be second step" << endl;main_wall = "build main wall"; }void build_floor() { cout << "must be third step" << endl;floor = "build floor"; }// 声明为友元函数, 可以访问私有变量friend ostream& operator << (ostream& os, const Building* b);
};ostream& operator << (ostream& os, const Building* b)
{os << b->foundation << "," << b->main_wall << "," << b->floor << endl;return os;
}class Builder
{
public:Builder() {};Building* build_building(){Building* b = new Building();b->build_foundation();b->build_main_wall();b->build_floor();return b;}
};int main()
{Builder* builder = new Builder();Building* building= builder->build_building();cout << building << endl;return 0;
}
执行结果
外观模式
简介
: 外观模式: 一般情况下, 都是因为老系统比较负责, 用一个类统一包装一下业务逻辑, 方便新系统使用
比如打车到某个地方, 分为三个部分, 然后用一个方法统一执行这些步骤, 统一打车的业务逻辑
1: 网络约车
2: 验证手机尾号
3: 驾驶员驾驶汽车到达目的地
4: 付款
代码
class SystemCallCar
{
public:void run() { cout << "call car" << endl; }
};class SystemVertifyPhone
{
public:void run() { cout << "vertify phone" << endl; }
};class ReachTargetPlace
{
public:void run() { cout << "drive car reach target place"; }
};class Pay
{
public:void run() { cout << "pay money" << endl; }
};class Face
{
public:void run(){SystemCallCar* s1 = new SystemCallCar();SystemVertifyPhone* s2 = new SystemVertifyPhone();ReachTargetPlace* s3 = new ReachTargetPlace();Pay* s4 = new Pay();s1->run();s2->run();s3->run();s4->run();}
};int main()
{Face f;f.run();return 0;
}
执行结果