java门面模式(外观模式)

java门面模式(外观模式)

    • 外观模式
    • 优点
    • 例子

下面是正文

外观模式

外观模式定义了一个将子系统的一组接口集中在一起的高层接口,以提供一个一致的界面。通过这个界面,客户端可以很方便的调用子系统的功能,而忽略子系统内部发生的变化。

优点

降低了子系统和客户的耦合度

例子

这里我们以智能家居回家、出门场景为例,子系统有:开灯、打开电视、打开空调。那么就将其回家、出门的这个场景作为门面,我们(客户端)只需要对场景操作,不需要了解子系统发生的变化。(例子如有不对,敬请指教)

智能灯 — 子系统

/**
 * 电灯 子系统
 *
 * 有开关灯操作
 * */
public class LightSubsystem {

    //开灯
    public void turnOnTheLight(){
        System.out.println("电灯已经打开!");
    }

    //关灯
    public void turnOffTheLight(){
        System.out.println("电灯已经关闭!");
    }
}

电视子系统


/**
 * 电视子系统
 *
 * 打开、关闭电视
 * */
public class TvSubsystem {
    //打开
    public void turnOnTheTv(){
        System.out.println("电视已经打开");
    }

    //关闭
    public void turnOffTheTv(){
        System.out.println("电视已经打开");
    }
}

空调—子系统

/**
 * 空调子系统
 *
 * 打开空调,调节温度
 *
 * 关闭空调
 * */
public class AirconditioningSubsystem {
    //打开空调,调节温度
    public void turnOnTheAC(){
        System.out.println("空调已经打开,温度设置为28℃");
    }

    //关闭空调
    public void turnOffTheAC(){
        System.out.println("空调已经关闭");
    }
}

场景门面模式

/**
 * 门面类
 *
 * 提供回家、出门场景方案
 *
 * 将子系统的方法集中在这个门面类中
 * */
public class SceneFacade {
    private LightSubsystem lightSubsystem = null;
    private TvSubsystem tvSubsystem = null;
    private AirconditioningSubsystem airconditioningSubsystem = null;

    public SceneFacade(){
        this.lightSubsystem = new LightSubsystem();
        this.tvSubsystem = new TvSubsystem();
        this.airconditioningSubsystem = new AirconditioningSubsystem();
    }

    //回家
    public void goHome(){
        System.out.println("------------回家------------");
        this.lightSubsystem.turnOnTheLight();
        this.tvSubsystem.turnOnTheTv();
        this.airconditioningSubsystem.turnOnTheAC();
    }

    //出门
    public void goOut(){
        System.out.println("------------出门------------");
        this.lightSubsystem.turnOffTheLight();
        this.tvSubsystem.turnOffTheTv();
        this.airconditioningSubsystem.turnOffTheAC();
    }
}

主入口

/**
 * 门面模式主入口类
 *
 * 这里我们以智能家居回家、出门场景为例
 * 子系统有:开灯、打开电视、打开空调
 * */
public class FacadePatternMain {
    public static void main(String[] args){
        SceneFacade sceneFacade = new SceneFacade();

        //回家
        sceneFacade.goHome();
        //出门
        sceneFacade.goOut();
    }
}

在这个模式里,我们只需要出现回家、出去的场景,场景这个门面就可以执行子系统的相关方法,而我们不必了解子系统的内部实现。只需要控制场景这一门面即可。

输出
java门面模式(外观模式)_第1张图片

[Java]设计模式源码

你可能感兴趣的:(2019)