zoukankan      html  css  js  c++  java
  • Java设计模式(12)——结构型模式之门面模式(Facade)

    一、概述

      概念

      

      简要示意图(没有一个统一的UML图)

      

      角色

      门面角色:门面模式核心,它被客户端调用,并且熟悉子系统

       子系统角色:子系统,子系统并不知道门面的存在,门面对它来说只不过是另外一个客户端而已。

      门面模式就是迪米特法则的一个很好的实践!

    二、实践

      借鉴网友的电脑启动的例子:电脑中有很多组件(比如内存,CPU等),开机的时候都会启动,用户不必一个个和他们打交道,而只需和“门面”打交道

    开启门面即可!

      三个CPU,Memory,Disk类

    /**
     * CPU类
     *
     * @author Administrator
     **/
    public class CPU {
        public void turnOn() {
            System.out.println("CPU turn on...");
        }
        public void turnOff() {
            System.out.println("CPU turn ff...");
        }
    }
    /**
     * Disk类
     *
     * @author Administrator
     **/
    public class Disk {
        public void turnOn() {
            System.out.println("Disk turn on...");
        }
        public void turnOff() {
            System.out.println("Disk turn ff...");
        }
    }
    /**
     * Memory类
     *
     * @author Administrator
     **/
    public class Memory {
        public void turnOn() {
            System.out.println("Memory turn on...");
        }
        public void turnOff() {
            System.out.println("Memory turn ff...");
        }
    }

      门面

    /**
     * 门面类
     *
     * @author Administrator
     **/
    public class Facade {
        private CPU cpu;
        private Disk disk;
        private Memory memory;
    
        public Facade() {
            cpu = new CPU();
            disk = new Disk();
            memory = new Memory();
        }
        public void turnOn() {
            cpu.turnOn();
            disk.turnOn();
            memory.turnOn();
        }
        public void turnOff() {
            cpu.turnOff();
            disk.turnOff();
            memory.turnOff();
        }
    }

      客户端使用

    /**
     * 客户端
     * @author  Administrator
     **/
    public class Client {
        public static void main(String[] args) {
            Facade facade = new Facade();
            facade.turnOn();
            facade.turnOff();
        }
    }

      

    三、改进与思考

      优点

      客户端与子系统之间松耦合

  • 相关阅读:
    【转】CentOS8新特性
    【转】Python 库打包分发(setup.py 编写)简易指南
    【转】Python3的venv虚拟环境操作(Linux)
    【转】Qt绘图之QGraphicsScene QGraphicsView QGraphicsItem详解
    【转】Qt 积累
    webapi 参数传递详解
    WPF 字体图标样式
    asp net core mvc 跨域ajax解决方案
    NPOI导出Excel封装
    XML序列化CDATA
  • 原文地址:https://www.cnblogs.com/jiangbei/p/7751747.html
Copyright © 2011-2022 走看看