奢侈品商城网站建设方案,榆林建站网站建设,wordpress行情插件,上海网页制作服务商目录
1、外观模式#xff08;Facade Pattern#xff09;含义
2、外观模式的UML图学习
3、外观模式的应用场景
4、外观模式的优缺点
5、C实现外观模式的简单实例 1、外观模式#xff08;Facade Pattern#xff09;含义 外观模式#xff08;Facade Pattern#xff09;…目录
1、外观模式Facade Pattern含义
2、外观模式的UML图学习
3、外观模式的应用场景
4、外观模式的优缺点
5、C实现外观模式的简单实例 1、外观模式Facade Pattern含义 外观模式Facade Pattern为子系统中的一组接口提供一个一致的界面此模式定义了一个高层接口这个接口使得这一子系统更加容易使用。 1外观模式隐藏了子系统的复杂性为客户端提供了一个简单的接口使得客户端更容易使用子系统。
2外观模式的核心思想是通过创建一个外观类也称为门面类将客户端与子系统解耦客户端只需要通过外观类来与子系统进行交互而不需要直接调用子系统的接口。
2、外观模式的UML图学习 在外观模式中有以下几个关键角色 1外观Facade外观类是外观模式的核心它提供了一个简单的接口用于访问子系统中的一组接口。外观类封装了对子系统的调用隐藏了子系统的复杂性为客户端提供了一个简单的接口。
2子系统Subsystem子系统是实现具体功能的一组类或模块。每个子系统都有自己的一组接口和实现逻辑。子系统可以是一个或多个类的集合。
3客户端Client客户端通过外观类来与子系统进行交互。客户端不需要直接调用子系统的接口而是通过外观类提供的简单接口来完成操作。
在外观模式中外观类充当了客户端与子系统之间的中介它将客户端的请求转发给子系统并将子系统的结果返回给客户端。这样客户端只需要与外观类进行交互而无需了解子系统的具体实现细节。
外观模式的目的是简化客户端与子系统之间的交互降低耦合度提高系统的可维护性和可扩展性。
3、外观模式的应用场景
1当需要简化复杂子系统的接口并提供一个统一的接口时。
2当需要将客户端与子系统解耦以降低客户端与子系统之间的依赖性时。
3当需要对子系统进行封装隐藏其复杂性提高系统的易用性和可维护性时。
4、外观模式的优缺点
1优点
1简化接口外观模式提供了一个简单的接口隐藏了子系统的复杂性。客户端只需要与外观类进行交互无需了解子系统的具体实现细节从而简化了客户端的调用过程。
2解耦子系统和客户端外观模式将客户端与子系统之间的依赖关系解耦使得它们可以独立演化。当子系统发生变化时只需要调整外观类即可而不会影响到客户端。
3提高可维护性外观模式将复杂的子系统封装在一个外观类中使得系统结构更加清晰易于理解和维护。对于客户端来说只需要关注外观类的接口而不需要关心子系统的具体实现。
4提高代码复用性外观模式可以将一些常用的操作封装在外观类中供多个客户端共享使用从而提高了代码的复用性。
2缺点
1不符合开闭原则当需要新增或修改子系统的功能时可能需要修改外观类的代码。这违反了开闭原则可能会导致外观类的修改引起其他客户端的不稳定。
2可能引入性能问题外观模式可能会引入一层间接调用导致系统性能下降。因此在设计时需要权衡系统的性能和代码结构的清晰度。
3可能增加系统复杂性如果一个系统本身就很简单使用外观模式可能会增加不必要的复杂性使得代码变得冗余。
总体来说外观模式是一种有用的设计模式可以提供简化的接口解耦子系统和客户端并提高系统的可维护性和可扩展性。但在使用时需要注意遵循设计原则权衡好代码的灵活性、性能和复杂性。
5、C实现外观模式的简单实例 #include iostream// 子系统A
class SubsystemA
{
public:void operationA() {std::cout Subsystem A operation std::endl;}
};// 子系统B
class SubsystemB
{
public:void operationB() {std::cout Subsystem B operation std::endl;}
};// 外观类
class Facade
{
private:SubsystemA subsystemA;SubsystemB subsystemB;public:void operation() {subsystemA.operationA();subsystemB.operationB();}
};int main()
{// 创建外观对象Facade facade;// 调用外观对象的操作方法facade.operation();return 0;
}在上述示例中我们定义了两个子系统类 SubsystemA 和 SubsystemB分别具有自己的操作方法 operationA 和 operationB。
然后我们创建了一个外观类 Facade该类持有 SubsystemA 和 SubsystemB 的实例并提供了一个操作方法 operation该方法内部调用了子系统的操作方法。
在 main 函数中我们创建了一个外观对象 facade并通过调用 facade.operation() 来间接访问子系统的功能。
运行以上代码输出将会是 Subsystem A operation Subsystem B operation 可以看到通过外观模式我们可以通过简单的接口来访问复杂的子系统功能而无需直接与子系统进行交互。