结构型(七) - 外观模式

一、概念

外观模式(Facade Pattern):隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。

优点:外观模式是迪米特法则的践行者,遵循着让客户端知道最少的原则,实现客户端和子系统类的解耦。

缺点:外观模式不符合“开闭模式”,当子系统类增加或者减少的时候,都需要修改外观类中的方法。引入抽象外观类在一定程度上解决了这个问题,但是维护抽象外观类及其子类也需要一定的成本。

使用场景:为子系统的一组接口提供一个简单的接口,最小化对子系统的依赖性。

二、实现

现在年轻人比较喜欢智能家居,很多家电都可以用手机智能控制,比如:家里的灯可以语音或者手机软件上进行开关,智能窗帘、电视等都可以通过手机一键开启关闭。但是每次操作都需要一个一个进行,回家后对这些家电的操作方式基本一致,因此,我们定义一个“回家模式”外观类。每次只要点击回家模式可以将家电操作一并进行。
1、家电类

#Light 
public class Light {
    
    
    public void turnOn() {
    
    
        System.out.println("开灯");
    }

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

#Curtain 
public class Curtain {
    
    
    public void open() {
    
    
        System.out.println("打开窗帘");
    }

    public void close() {
    
    
        System.out.println("关上窗帘");
    }
}

#TV
public class TV{
    
    
    public void turnOn() {
    
    
        System.out.println("电视开机");
    }

    public void turnOff() {
    
    
        System.out.println("电视关机");
    }
}

2、外观模式 - 定义个“回家模式”,回家以后把灯打开,窗帘关上,电视打开。

public class BackHomeMode {
    
    
    private Curtain curtain;
    private Light light;
    private TV tv;

    public BackHomeMode() {
    
    
        curtain = new Curtain();
        light = new Light();
        tv = new TV();
    }

    public void startHomeMode() {
    
    
        light.turnOn();
        curtain.close();
        tv.turnOn();
    }
}

3、测试类

public class Client {
    
    
    public static void main(String[] args) {
    
    
        BackHomeMode backHomeMode = new BackHomeMode();
        backHomeMode.startHomeMode();
    }
}

4、运行结果
外观运行结果1.png

猜你喜欢

转载自blog.csdn.net/kongqwesd12/article/details/132403336