zoukankan      html  css  js  c++  java
  • 设计模式(八)_门面模式

    今天一看日期,我擦,已经7月中旬了,抓紧时间学习起来。这个月要把设计模式结束掉,因为需要学习的东西太多了

    为什么今天学习这个模式呢,因为最近在看log4j2,然后看到了阿里规约中有关日志的规约中写到:

    应用中不可直接使用日志系统 (Log 4 j 、 Logback) 中的 API ,而应依赖使用日志框架
    SLF 4 J 中的 API ,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。

    概念

    门面模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用

    门面模式有的地方也称为外观模式

    例子

    看了上面概念,我想门面模式应该这个样子,以日志系统为例

    image

    咱们再找找其他人如何表示的
    image

    不得不佩服大牛,不仅技术强,画图也比我画的好!咱们还是先从简单的例子中理解下,路要一步一步走的。这篇主要以门面模式为主


    代码示例

    找个简单的例子,这个例子很形象,保证你看了之后绝对能记住

    身为程序员,第一件事情就是来了开电脑,只要按下开机键。其实电脑内部实际上也启动了多个模块,如cpu、硬盘、内存等等

    image

    开机键就是一个很好的门面,让程序员无需了解cpu,内存和硬盘如何启动。

    
    public class Cpu {
    	
    	public void start() {
    		System.out.println("cpu启动了");
    	}
    
    }
    
    public class Disk {
    	
    	public void start() {
    		System.out.println("硬盘启动了");
    	}
    }
    
    public class Memory {
    	
    	public void start() {
    		System.out.println("内存启动了");
    	}
    
    }
    
    

    如果没有开机键,我们需要这么做:

    		new Cpu().start();
    		new Disk().start();
    		new Memory().start();
    		
    

    有了开机键,这些操作都交给开机键去做

    public class StartBtn {
    	
    	public void start() {
    		new Cpu().start();
    		new Disk().start();
    		new Memory().start();
    	}
    
    }
    
    

    我们只需要

    new StartBtn().start();
    
    

    门面模式不仅为我们提供了一个简单方便的接口,也让我们的系统和子系统解耦。

    总结

    门面模式主要使用场景:

    • 包装多个复杂的子系统,提供一个简单的接口
    • 重新包装系统,隐藏不想暴露的接口

    优缺点

    将复杂的接口简单化,减少了客户端与接口之间的耦合,提高了安全性。可能产生大量的中间类(门面类),一定程度上增加了系统的复杂度

  • 相关阅读:
    [iOS Animation]-CALayer 图像IO
    weblogic集群
    mysql相关函数及用法
    mysql导出导入数据库
    java多线程实现复制功能并统计进度
    java多线程模拟实现12306售票
    Oracle中的常用数据类型
    jdbc连接mysql和oracle数据库-java
    将字符串插入到光标指定位置-js
    二维数组模拟实现酒店管理系统-java
  • 原文地址:https://www.cnblogs.com/zhenghengbin/p/9304124.html
Copyright © 2011-2022 走看看