Java设计模式之外观模式示例详解

 更新时间:2022年08月27日 14:09:40   作者:niuyongzhi  
外观模式为多个复杂的子系统,提供了一个一致的界面,使得调用端只和这个接口发生调用,而无须关系这个子系统内部的细节。本文将通过示例详细为大家讲解一下外观模式,需要的可以参考一下

1.什么是外观模式

当一个用户类需要和某个系统中的多个子系统打交道时,为了避免该类和子系统中的类产生过多的依赖关系,可以采用外观模式。外观模式,为这些子系统提供一个外观类进行功能的封装,外观类负责和子系统中的类打交道,用户类和外观类打交道,简化了用户类和子系统进行交互和依赖。

2.如何实现

1)子系统,是若干个类的集合,这些类协同为用户提供所需的功能,子系统中的任何类都不包含外观类的引用

2)外观类(Facade),该类包含子系统中全部或部分类的实例引用。外观类可以替代子系统中的类和用户打打交道。

3.代码实现

以一个广告系统做案例,该系统包含CheckWord,Charge,TypeSeting三个子类。

AdFacade是这个子系的外观类,负责和用户类进行交互,并调用子系统中的功能实现用户需求。

1)子系统CheckWord

/**
 * 子系统1
 * 广告检查系统
 * 完成广告字数计算
 */
public class CheckWord {
    int amount;
    String ad;
    public CheckWord (String ad){
        this.ad = ad;
    }
    /**
     * 计算广告字数,按字数收费
     * @return
     */
    public int setAmout( ){
        System.out.println("计算广告字数");
        amount = ad.length();
        return amount;
    }
}

2)Charge

/**
 * 子系统2
 * 计算广告价格
 */
public class Charge {
    CheckWord word;
    public int price;
    public Charge(CheckWord word){
        this.word = word;
    }
    public int giveCharge( ){
        //计算广告价格
        System.out.println("计算价格");
        price = word.amount*100;
        return price;
    }
}

3)TypeSetting

/**
 * 子系统3
 * 广告排版
 */
public class TypeSetting {
    private String ad;
    public TypeSetting(String ad){
        this.ad = ad;
    }
    public void typeSetting(){
        System.out.println("广告排版");
    }
}

4)外观类

/**
 * 外观类
 * 包含子系统中全部或部分类。
 * 这个类替代子系统和用户类打交道,
 * 所有用户想要完成的功能由这个类进行调用,
 * 避免了用户类和子系统过多的依赖。
 */
public class AdFacade {
    private CheckWord checkWord;
    private Charge charge;
    private TypeSetting typeSetting;
    public AdFacade(String ad){
        this.checkWord = new CheckWord(ad);
        this.charge = new Charge(checkWord);
        this.typeSetting = new TypeSetting(ad);
    }
    /**
     * 完成用户发布广告的任务
     */
    public void finishAdTask(){
        checkWord.setAmout();
        charge.giveCharge();
        typeSetting.typeSetting();
    }
}

5)测试类

public class Main {
    public static void main(String args[]){
        String ad ="hello world";
        AdFacade adFacade = new AdFacade(ad);
        adFacade.finishAdTask();
    }
}

到此这篇关于Java设计模式之外观模式示例详解的文章就介绍到这了,更多相关Java外观模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JMeter参数化4种实现方式(小结)

    JMeter参数化4种实现方式(小结)

    参数化是自动化测试脚本的一种常用技巧,可将脚本中的某些输入使用参数来代替,JMeter提供了多种参数化方式,下面就其中常用的4种展开阐述,感兴趣的可以来了解一下
    2021-12-12
  • 全面剖析java 数据类型与运算符

    全面剖析java 数据类型与运算符

    这篇文章主要介绍了Java基本数据类型和运算符,结合实例形式详细分析了java基本数据类型、数据类型转换、算术运算符、逻辑运算符等相关原理与操作技巧,需要的朋友可以参考下
    2021-09-09
  • 移动开发Spring Boot外置tomcat教程及解决方法

    移动开发Spring Boot外置tomcat教程及解决方法

    这篇文章主要介绍了移动开发SpringBoot外置tomcat教程,需要的朋友可以参考下
    2017-11-11
  • java的NIO管道用法代码分享

    java的NIO管道用法代码分享

    这篇文章主要介绍了java的NIO管道用法代码分享,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • Java实现局域网聊天室功能(私聊、群聊)

    Java实现局域网聊天室功能(私聊、群聊)

    这篇文章主要为大家详细介绍了Java实现局域网聊天室功能,包括私聊、群聊,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • SpringBoot启动访问localhost:8080报错404的解决操作

    SpringBoot启动访问localhost:8080报错404的解决操作

    这篇文章主要介绍了SpringBoot启动访问localhost:8080报错404的解决操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • SpringBoot2整合Redis多数据源步骤详解

    SpringBoot2整合Redis多数据源步骤详解

    这篇文章主要介绍了SpringBoot2整合Redis多数据源步骤详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 解决J2EE-session在浏览器关闭后失效问题

    解决J2EE-session在浏览器关闭后失效问题

    最近做项目使用的是Spring+SpringMVC+Mybatis框架,maven管理目录的javaweb端系统,对于session的一些问题,在此小编给大家分享到脚本之家平台,需要的朋友参考下吧
    2018-01-01
  • 详解mybatis-plus的 mapper.xml 路径配置的坑

    详解mybatis-plus的 mapper.xml 路径配置的坑

    这篇文章主要介绍了详解mybatis-plus的 mapper.xml 路径配置的坑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • mybatis plus实现条件查询

    mybatis plus实现条件查询

    这篇文章主要为大家介绍了mybatis plus实现条件查询,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05

最新评论