欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

设计模式之外观模式(Facade)

程序员文章站 2022-03-10 17:37:19
外观模式应该是程序员最下意识用的一种模式,比如我们习惯性的对复杂系统做一个封装接口。外观模式其本质是对一堆复杂对象和应用的接口抽象,对它们进行封装隔离,对于调用者来说只需要关系接口的实现,而不需要知道内部有哪些对象和调用。 作用 为模块的一组接口提供一致的界面,定义了一个高层接口,这个接口使得这一模 ......

外观模式应该是程序员最下意识用的一种模式,比如我们习惯性的对复杂系统做一个封装接口。外观模式其本质是对一堆复杂对象和应用的接口抽象,对它们进行封装隔离,对于调用者来说只需要关系接口的实现,而不需要知道内部有哪些对象和调用。

作用

为模块的一组接口提供一致的界面,定义了一个高层接口,这个接口使得这一模块更加容易使用。

类视图

设计模式之外观模式(Facade)

实现

//复杂或多对象
class objectOne
{
    public void operator() 
    {
        cout<<"operator one\n";
    }
}
class objectTwo
{
    public void operator() 
    {
        cout<<"operator two\n";
    }
}
class objectThree
{
    public void operator() 
    {
        cout<<"operator three\n";
    }
}
class objectFour
{
    public void operator() 
    {
        cout<<"operator four\n";
    }
}
//外观实现
class Facade
{
    objectOne one;
    objectTwo two;
    objectThree three;
    objectFour four;

    public Facade() 
    {
        obj1 = new objectOne();
        obj2 = new objectTwo();
        obj3 = new objectThree();
        obj4 = new objectFour();
    }
    public void MethodA() 
    {
        cout<<" Fun A()-----\n");
        obj1.operator();
        obj2.operator();
        obj3.operator();
        obj4.operator();
    }
    public void MethodB() 
    {
        cout<<" Fun B()-----\n");
        obj4.operator();
        obj3.operator();
        obj2.operator();
        obj1.operator();
    }
}
//调用
void main() 
{
    Facade facade = new Facade();
    facade.MethodA();
    facade.MethodB();
}

应用场景

  1. 构建上下层次的模块时,如果上下进行调用,则会出现强耦合,用外观模式实现上下级模块的接口,简化相互调用的交叉,降低上下层的耦合度;
  2. 在多个复杂模块相互协作工作时,向上用外观类提炼出高层接口,对外隐藏其内部的实现并隔离变化;
  3. 对单独模块或者对复杂模块的封装,提炼出外观类进行封装访问,解耦合。