Unity高阶-游戏常用设计模式-外观模式

一个子系统的外部与其内部的通信通过一个统一的外观类进行,外观类将客户类与子系统的内部复杂性分隔开,使得客户类只需要与外观角色打交道,而不需要与子系统内部的很多对象打交道

外观模式:为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。对象结构型模式

又称为门面模式

是迪米特法则的一种具体实现

通过引入一个新的外观角色来降低原有系统的复杂度,同时降低客户类与子系统的耦合度

所指的子系统是一个广义的概念,它可以是一个类、一个功能模块、系统的一个组成部分或者一个完整的系统

外观模式包含以下2个角色:

Facade(外观角色)

SubSystem(子系统角色)

子系统类典型代码:

class SubSystemA

{

    public void MethodA()

    {

        //业务实现代码

    }

}

class SubSystemB

{

    public void MethodB()

    {

        //业务实现代码

}

}

class SubSystemC

{

    public void MethodC()

    {

        //业务实现代码

    }

}

外观类典型代码:

class Facade

{

private SubSystemA obj1 = new SubSystemA();

private SubSystemB obj2 = new SubSystemB();

private SubSystemC obj3 = new SubSystemC();

public void Method()

{

    obj1.MethodA();

    obj2.MethodB();

    obj3.MethodC();

}

}

客户类典型代码:

class Program

{

    static void Main(string[] args)

    {

        Facade facade = new Facade();

        facade.Method();

    }

}

抽象外观类

在标准的外观模式的结构图中,如果需要增加、删除或更换与外观类交互的子系统类,必须修改外观类或客户端的源代码,这将违背开闭原则,因此可以通过引入抽象外观类对系统进行改进,在一定程度上解决该问题

模式优点

它对客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易

它实现了子系统与客户端之间的松耦合关系,这使得子系统的变化不会影响到调用它的客户端,只需要调整外观类即可

一个子系统的修改对其他子系统没有任何影响,而且子系统的内部变化也不会影响到外观对象

模式缺点

不能很好地限制客户端直接使用子系统类,如果对客户端访问子系统类做太多的限制则减少了可变性和灵活性

如果设计不当,增加新的子系统可能需要修改外观类的源代码,违背了开闭原则

使用环境

要为访问一系列复杂的子系统提供一个简单入口

客户端程序与多个子系统之间存在很大的依赖性

在层次化结构中,可以使用外观模式的定义系统中每一层的入口,层与层之间不直接产生联系,而是通过外观类建立联系,降低层之间的耦合度

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容