外观模式(也叫做门面模式)

外观模式(也叫做门面模式):

影院管理项目:

 

 

 

 

 

 

 

 

 

外观模式的基本介绍:

 

 

 

外观模式的原理类图:

 

 

 

原理类图的说明(外观模式的角色)

1)外观类(Facade:为调用端提供统一的调用接口,外观类知道哪些子系统负责处理请求,从而将调用端的请求代理给适当的子系统对象。

2)调用者(Client:外观接口的调用者。

3)子系统的集合:指模块或者子系统,处理Facade对象指派的任务,他是功能实际的提供者。

 

 

 

 

 

 

代码实现:

 

 

package com.sky.facade;

public class DVDPlayer {

    //单例模式 饿汉式
    private static DVDPlayer dvdPlayer = new DVDPlayer();

    /**
     * 私有化五参数构造方法
     */
    private DVDPlayer(){

    }

    /**
     * 提供全局唯一的访问点
     *
     */
    public static DVDPlayer getInstance(){
        return dvdPlayer;
    }

    /**
     * DVD的操作方法
     */

    //打开
    public void open(){
        System.out.println("DVD开机。。。");
    }
    //关机
    public void close(){
        System.out.println("DVD关机。。。");
    }
    //播放
    public void play(){
        System.out.println("播放影片。。。");
    }
    //暂停
    public void pause(){
        System.out.println("DVD暂停。。。");
    }
    //使用操作
    public void option(){
        System.out.println("DVD使用操作。。。");
    }

}

 

package com.sky.facade;

//灯光设备;
public class Lamplight {

    private static Lamplight lamplight = new Lamplight();
    //使用单例模式之饿汉式;
    private Lamplight(){

    }

    public static Lamplight getInstance(){
        return lamplight;
    }

    //管理灯光;
    public void openLamp(){
        System.out.println("开灯");
    }

    //将灯光变暗
    public void dim(){
        System.out.println("灯光变暗");
    }

    public void closeLamp(){
        System.out.println("关灯");
    }
}

 

package com.sky.facade;

/**
 * 爆米花机
 */
public class PopCorn {

    public static PopCorn popCorn = new PopCorn();

    private PopCorn(){

    }

    public static PopCorn getInstance(){
        return popCorn;
    }

    /**
     * 爆米花设备操作
     */
    public void openPop(){
        System.out.println("爆米花设备开机。。。");
    }

    public void closePop(){
        System.out.println("爆米花设备关机。。。");
    }

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

 

package com.sky.facade;

/**
 * 外观类(界面类)
 */
public class TheatreFacade {

    //管理多个设备
    private DVDPlayer dvdPlayer;
    private Lamplight lamplight;
    private PopCorn popCorn;

    public TheatreFacade(){
        super();
        this.dvdPlayer = DVDPlayer.getInstance();
        this.lamplight = Lamplight.getInstance();
        this.popCorn = PopCorn.getInstance();
    }

    //观看电影前的准备
    public void ready(){
        //DVD,爆米花机,灯光
        dvdPlayer.open();
        popCorn.openPop();
        lamplight.openLamp();
    }

    //观看电影中的准备
    public void play(){
        dvdPlayer.play();
        lamplight.dim();
    }

    //观影后的管理
    public void finish(){
        //关闭DVD,关闭爆米花机,关闭灯光
        dvdPlayer.close();
        popCorn.closePop();
        lamplight.closeLamp();
    }

}

 

package com.sky.facade;

/**
 * 客户端
 */
public class Client {

    public static void main(String[] args) {
       //在客户端,只需要引用界面类就可以了
        TheatreFacade facade = new TheatreFacade();
        facade.ready();
        System.out.println("=======================");
        facade.play();
        System.out.println("=======================");
        facade.finish();
    }

}

 

运行结果:

DVD开机。。。

爆米花设备开机。。。

开灯

=======================

播放影片。。。

灯光变暗

=======================

DVD关机。。。

爆米花设备关机。。。

关灯

 

外观模式的注意事项和细节

 

posted on 2022-11-26 18:40  ~码铃薯~  阅读(68)  评论(0编辑  收藏  举报

导航