zoukankan      html  css  js  c++  java
  • 外观模式(Facade Pattern)

    定义:
     
    定义了一个高层、统一的接口,外部与通过这个统一的接口对子系统中的一群接口进行访问。
     
    解决的问题:
     
    • 避免了系统与系统之间的高耦合度
    • 使得复杂的子系统用法变得简单

    uml类图:

     
    模式组成:
    • Facade:外观角色。是模式的核心,他被客户client角色调用,知道各个子系统的功能。同时根据客户角色已有的需求预订了几种功能组成
    • Subsystem classes:子系统角色。实现子系统的功能,并处理由Facade对象指派的任务。对子系统而言,facade和client角色是未知的,没有Facade的任何相关信息;即没有指向Facade的实例
    • client:客户角色。调用facade角色获得完成相应的功能
     
    优点:
     
    • 降低了客户类与子系统类的耦合度,实现了子系统与客户之间的松耦合关系
    • 外观模式对客户屏蔽了子系统组件,从而简化了接口,减少了客户处理的对象数目并使子系统的使用更加简单
    • 降低原有系统的复杂度和系统中的编译依赖性,并简化了系统在不同平台之间的移植过程
     
    缺点:
     
    • 在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”
    • 不能很好地限制客户使用子系统类,如果对客户访问子系统类做太多的限制则减少了可变性和灵活性。
     
    应用:
     
    举个栗子:
     
    定义外观角色
    class Computer {
        Memory memory;
        Cpu cpu;
    
        public Computer() {
            memory = new Memory();
            cpu = new Cpu();
        }
    
        public void start() {
            memory.start();
            cpu.start();
        }
    }

    定义子系统角色

    class Memory {
        public void start() {
            System.out.println("memory start!");
        }
    }

    定义子系统角色

    class Cpu {
        public void start() {
            System.out.println("cpu start!");
        }
    }

    客户端调用

     public static void main(String[] args) {         
                 Computer c = new Computer();         
                 c.start();    
            }
  • 相关阅读:
    Reverse Integer
    First Bad Version
    Heaters
    Number of Segments in a String
    RPI学习--环境搭建_串口连接
    关键字const
    main函数参数的使用
    Redis 简单使用 and 连接池(python)
    南宁AI项目
    Go part 1 初探
  • 原文地址:https://www.cnblogs.com/amei0/p/8057589.html
Copyright © 2011-2022 走看看