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

目录
  • 定义
  • 案例
    • 需求
    • 方案:外观模式实现
  • 分析
  • 总结

定义

外观模式为多个复杂的子系统,提供了一个一致的界面,使得调用端只和这个接口发生调用,而无须关系这个子系统内部的细节

案例

需求

看电影的时候需要进行一系列的操作,比如打开播放器,放下屏幕,打开投影仪,打开音响等,这个要怎么进行管理呢

方案:外观模式实现

定义播放器类

public class Player {

    private static Player player = new Player();

    private Player(){}

    public static Player getInstance(){

        return player;
    }

    public void on(){
        System.out.println("打开播放器");
    }

    public void off(){
        System.out.println("关闭播放器");
    }

    public void play(){
        System.out.println("使用播放器播放电影");
    }

    public void pause(){
        System.out.println("暂停播放器");
    }

    public void select(){
        System.out.println("选择喜欢的电影");
    }
}

定义投影仪类

public class Projector {

    private static Projector projector = new Projector();

    private Projector(){}

    public static Projector getInstance(){

        return projector;
    }

    public void on(){
        System.out.println("放下屏幕,打开投影仪");
    }

    public void off(){
        System.out.println("关闭投影仪");
    }

    public void focus(){
        System.out.println("调节投影仪焦距");
    }

    public void zoom(){
        System.out.println("投影仪变焦");
    }

}

定义音响类

public class Stereo {

    private static Stereo stereo = new Stereo();

    private Stereo(){}

    public static Stereo getInstance(){
        return stereo;
    }

    public void on(){
        System.out.println("打开音响");
    }

    public void off(){
        System.out.println("关闭音响");
    }

    public void setVolume(){
        System.out.println("调节音响音量");
    }
}

定义爆米花机类

/**
 * 爆米花机
 * @author:liyajie
 * @createTime:2022/3/2 14:24
 * @version:1.0
 */
public class Popcorn {

    private static Popcorn popcorn = new Popcorn();

    private Popcorn(){}

    public static Popcorn getInstance(){
        return popcorn;
    }

    public void on(){
        System.out.println("打开爆米花机");
    }

    public void off(){
        System.out.println("关闭爆米花机");
    }

    public void pop(){
        System.out.println("制作爆米花");
    }
}

定义家庭影院外观类

public class HomeTheaterFacade {

    // 聚合各个子系统
    private Player player;

    private Popcorn popcorn;

    private Projector projector;

    private Stereo stereo;

    public HomeTheaterFacade(){

    }

    // 全参构造器
    public HomeTheaterFacade(Player player, Popcorn popcorn,Projector projector,Stereo stereo){
        this.player = player;
        this.popcorn = popcorn;
        this.projector = projector;
        this.stereo = stereo;
    }

    // 准备阶段
    public void ready(){
        popcorn.on();
        player.on();
        projector.on();
        stereo.on();
    }

    // 播放
    public void play(){
        player.select();
        popcorn.pop();
        projector.focus();
        stereo.setVolume();
    }

    // 结束
    public void end(){
        player.off();
        popcorn.off();
        projector.off();
        stereo.off();
    }
}

定义测试类

public class Test {
    public static void main(String[] args) {
        HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade(Player.getInstance(),Popcorn.getInstance(),Projector.getInstance(),Stereo.getInstance());
        homeTheaterFacade.ready();
        homeTheaterFacade.play();
        homeTheaterFacade.end();
    }
}

查看测试结果

分析

我们通过家庭影院外观类HomeTheaterFacade的ready,play,end方法操作了播放器,投影仪等的打开,关闭,对于家庭影院外观类来说,他是不需要知道播放器,投影仪等的打开,关闭具体是怎么样实现的。在一定程度上实现了解耦,易维护和扩展。

总结

优势:

1.外观模式对外屏蔽了子系统的实现细节(安全性)

2.外观模式降低了客户端与子系统交互的复杂性,对客户端和子系统进行解耦合,子系统内部的模块更容易维护和扩展

3.通过合理的使用外观模式,可以帮助我们更好的划分访问层次

使用场景

1.对分层的系统进行构建时,使用外观模式可以简化子系统之间的依赖关系

2.当有一个复杂的系统,里面有很多子系统,有大量的操作,这时候可以使用外观模式

3.当客户端与多个子系统之间存在很多耦合时,引入外观模式,可以将他们分离,提高子系统的独立性和可移植性

以上就是Java设计模式之外观模式示例详解的详细内容,更多关于Java外观模式的资料请关注我们其它相关文章!

(0)

相关推荐

  • Java设计模式详解之门面模式(外观模式)

    门面模式(Facade Pattern)也叫外观模式,它隐藏系统的复杂性,并向客户端提供一个可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性,为子系统中的一组接口提供了一个统一的高层访问接口,这个接口使得子系统更容易被访问或使用.这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用. 简而言之,就是把一堆复杂的流程封装成一个接口供给用户更简单的使用,这个设计模式里有三个角色: 1)门面角色( facade ):

  • Java设计模式之外观模式(Facade模式)介绍

    外观模式(Facade)的定义:为子系统中的一组接口提供一个一致的界面. Facade一个典型应用就是数据库JDBC的应用,如下例对数据库的操作: 复制代码 代码如下: public class DBCompare { Connection conn = null; PreparedStatement prep = null; ResultSet rset = null; try { Class.forName( "<driver>" ).newInstance(); co

  • java设计模式之外观模式(Facade)

    概述 外部与内部子系统通信时必须通过的一个统一的外观模式对象进行,就是外观模式,也称门面模式.一般而言,Facade模式是为了降低客户端与实现化层之间的依赖性.外观模式的用意是为子系统提供一个集中化和简化的沟通渠道. UML类图 在上面的UML图中,出现三个角色: 客户端角色(Client):用户通过客户端来调用外观模式的类,从而来操作子系统: 外观角色(Facade):客户端可以调用这个类,此类中包含了调用子系统中具体的功能: 子系统角色(Module):定义了子系统中具体的单个功能: 代码示

  • Java设计模式之java外观模式详解

    目录 模式动机 模式定义 模式结构 角色 模式分析 典型的外观角色代码 外观模式实例与解析 实例一:电源总开关 实例二:文件加密 模式优缺点 优点 缺点 模式适用环境 源码分析外观模式的典型应用 (1) 外观模式应用于JDBC数据库操作 (2) Session外观模式是外观模式在Java EE框架中的应用 模式扩展 一个系统有多个外观类 不要试图通过外观类为子系统增加新行为 外观模式与迪米特法则 抽象外观类的引入 总结 参考文章 总结 模式动机 引入外观角色之后,用户只需要直接与外观角色交互,用

  • 深入理解Java设计模式之外观模式

    目录 一.什么是外观模式 二.外观模式的使用场景 三.外观模式的优缺点 四.外观模式的实现 总结 一.什么是外观模式 定义:为子系统中的一组接口提供一个一致的界面,用来访问子系统中的一群接口. 外观模式组成: Facade:负责子系统的的封装调用 Subsystem Classes:具体的子系统,实现由外观模式Facade对象来调用的具体任务 二.外观模式的使用场景 1.设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式: 2.开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调

  • java设计模式之外观模式学习笔记

    外观模式: 又称门面模式: 外观Facade为子系统的一组接口提供一个一致界面,使得这组子系统易于使用(通过引入一个新的外观角色降低原系统复杂度,同时降低客户类与子系统的耦合度). 图片来源: 设计模式: 可复用面向对象软件的基础. 实现 案例需求: 租房 有过自己找房租房经历的同学能够体会得到找房是件很痛苦的事, 不光要挨个小区跑而且还要跟(二)房东讨价还价. 于是后来学聪明了, 不再自己挨门挨户的磨嘴皮子, 而是直接找像链家.我爱我家这样的房屋中介, 他们手上握有一定的房源, 我们只需付给他

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

    目录 定义 案例 需求 方案:外观模式实现 分析 总结 定义 外观模式为多个复杂的子系统,提供了一个一致的界面,使得调用端只和这个接口发生调用,而无须关系这个子系统内部的细节 案例 需求 看电影的时候需要进行一系列的操作,比如打开播放器,放下屏幕,打开投影仪,打开音响等,这个要怎么进行管理呢 方案:外观模式实现 定义播放器类 public class Player { private static Player player = new Player(); private Player(){}

  • Java设计模式之策略模式示例详解

    目录 定义 结构 UML类图 UML序列图 深入理解策略模式 策略和上下文的关系 策略模式在JDK中的应用 该策略接口有四个实现类 策略模式的优点 策略模式的缺点 策略模式的本质 在讲策略模式之前,我们先看一个日常生活中的小例子: 现实生活中我们到商场买东西的时候,卖场往往根据不同的客户制定不同的报价策略,比如针对新客户不打折扣,针对老客户打9折,针对VIP客户打8折... 现在我们要做一个报价管理的模块,简要点就是要针对不同的客户,提供不同的折扣报价. 如果是有你来做,你会怎么做? 我们很有可

  • java编程创建型设计模式工厂方法模式示例详解

    目录 1.什么是工厂方法模式? 2.案例实现 3.JDK中的工厂方法模式 1.什么是工厂方法模式? 工厂方法模式设计方案:  将披萨项目的实例化功能抽象成抽象方法,在不同的口味点餐子类中具体实现. 工厂方法模式:  定义了一个创建对象的抽象方法,由子类决定要实例化的类.工厂方法模式将对象的实例化推迟到子类. 何时使用?  不同条件下创建不用实例时.方法是让子类实现工厂接口. 2.案例实现 假如说,我们现在有这样一个需求:客户在点披萨时,可以点不同口味的披萨,比如北京的奶酪pizza.北京的胡椒p

  • Java结构型设计模式中代理模式示例详解

    目录 代理模式 分类 主要角色 作用 静态代理与动态代理的区别 静态代理的基本使用 创建抽象主题 创建真实主题 创建代理主题 客户端调用 JDK动态代理的基本使用 创建抽象主题 创建真实主题 创建代理主题 客户端调用 小优化 CGLIB动态代理的基本使用 创建抽象主题 创建真实主题 创建代理主题 客户端调用 小优化 CGLIB与JDK动态代理区别 1.执行条件 2.实现机制 3.性能 代理模式 代理模式(Proxy Pattern)属于结构型模式. 它是指为其他对象提供一种代理以控制对这个对象的

  • Java结构型设计模式中建造者模式示例详解

    目录 建造者模式 概述 角色 优缺点 应用场景 基本使用 创建产品类 创建建造者类 使用 链式写法 创建产品类与建造者类 使用 建造者模式 概述 建造者模式(Builder Pattern)属于创建型模式. 它是将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. 简而言之:建造者模式就是使用多个简单的对象一步一步构建成一个复杂的对象. 建造者模式适用于创建对象需要很多步骤,但是步骤的顺序不一定固定.如果一个对象有非常复杂的内部结构(很多属性),可以将复杂对象的创建和使用进行分

  • Java设计模式之原型设计示例详解

    目录 简单说一下(定义) 稍微夸一下(优缺点) 顺便提一下(适用场景) 着重讲一下(深.浅克隆) 多多用一下(结构.代码实现) 简单说一下(定义) 什么是原型模式:原型模式是用于创建重复的对象,同时又能保证性能.用一个已经创建的实例作为原型,通过复制该原型对象来创建一个或者多个和原型相同或者相似的新对象 举例说明:我们都玩过打飞机的游戏,敌军的飞机可谓是数不胜数,但是如果每出一架敌机都要重新实例化的话,那么自然我们的功能很复杂.所以这个时候我们的原型模式就派上用场了,只实例化一架飞机出来,其他的

  • Java设计模式中桥接模式应用详解

    目录 1.桥接(Bridge)设计模式定义 2.桥接设计模式优点以及不足 3.桥接设计的实现思路 4.桥接设计模式示例 5.桥接模式的应用场景 6.桥接设计模式和适配器设计模式对比 编程是一门艺术,大批量的改动显然是非常丑陋的做法,用心的琢磨写的代码让它变的更美观. 显示生活中有物品具有多个维度的属性,比如文字有颜色和字体两个维度的差别,汽车有颜色和牌子两个维度的属性等.如果用继承方式,不但对应的子类很多,而且扩展困难.如果用桥接模式就能很好地解决这些问题. 1.桥接(Bridge)设计模式定义

  • Go语言基础设计模式之策略模式示例详解

    目录 概述 针对同一类型问题的多种处理方式 一.不使用策略模式 二.策略模式 UML 总结 示例 概述 定义一系列算法,将每个算法封装起来.并让它们能够相互替换.策略模式让算法独立于使用它的客户而变化. 针对同一类型问题的多种处理方式 一.不使用策略模式 package main import "fmt" type User struct { Name string } func (this User) travel(t string) { switch t { case "

  • Java设计模式之适配器模式的示例详解

    目录 定义 分类 案例 需求 方案一:类适配器 方案二:对象适配器 方案三:接口适配器 对比分析 方案一:类适配器 方案二:对象适配器 方案三:接口适配器 总结 定义 适配器模式,即将某个类的接口转换成客户端期望的另一个接口的表示,主要目的是实现兼容性,让原本因为接口不匹配,没办法一起工作的两个类,可以协同工作. 分类 类适配器 对象适配器 接口适配器 案例 需求 手机充电,通过手机充电器将220V电压适配为5V 方案一:类适配器 定义220V交流电(被适配者的角色) /** * 220V交流电

  • Java设计模式之工厂模式案例详解

    目录 分类 案例 需求 方案一:简单工厂模式 方案二:工厂方法模式 方案三:抽象工厂模式 对比分析 总结 分类 1.简单工厂模式 2.工厂方法模式 3.抽象工厂模式 案例 需求 根据蛋糕的不同口味,分别创建苹果味和香蕉味的蛋糕实例 方案一:简单工厂模式 定义蛋糕父类 /** * 蛋糕 * @author:liyajie * @createTime:2022/2/14 10:17 * @version:1.0 */ public class Cake { } 定义苹果味的蛋糕 /** * 苹果蛋糕

随机推荐