设计模式(9)外观模式

摘要:
有一些方法,即使用外观模式。我们只需要执行home操作就可以完成这一系列操作,并完成一次完整的操作。添加的代码如下:publicclassHomeAction{privateLight;privateTVtv;privateRedioredio;publicHomeAction{this.light=light;this.tv=tv;this.redio=redio;}publicvoidgetHome(){light.on();tv.on(publicvoidleaveHome(){light.off();tv.off(();redio.of();}}HomeAction测试代码publicstaticvoidmain{Lightlight=newLight();Redioredio=newRedio();TVtv=newTV();HomeActionhomeAction=newHomeAction;System.out.println;HomeAction.getHome();System.out.pintln;HomeAction.liveHome()测试结果外观模式提供了一个统一的接口来访问子系统中的一组接口。皮肤模式定义了一个高级界面,使子系统更易于使用。外观模式不用于向界面添加新功能。它用于减少外部和子系统之间的相互作用和松散耦合,以便外部可以更容易地使用子系统。

我们每天上班回到家的时候都会做一系列的动作,像打开灯、打开电视和打开音响,用代码描述就如下一样。

设计模式(9)外观模式第1张设计模式(9)外观模式第2张
public class Light {
    public void on() {
        System.out.println("打开了灯!");
    }

    public void off() {
        System.out.println("关闭了灯!");
    }
}
Light
设计模式(9)外观模式第3张设计模式(9)外观模式第4张
public class Redio {
    public void on() {
        System.out.println("打开了音箱!");
    }

    public void off() {
        System.out.println("关闭了音箱!");
    }
}
Redio
设计模式(9)外观模式第5张设计模式(9)外观模式第6张
public class TV {
    public void on() {
        System.out.println("打开了电视!");
    }

    public void off() {
        System.out.println("关闭了电视!");
    }
}
TV

测试代码

public static void main(String[] args) {
        Light light = new Light();
        Redio redio = new Redio();
        TV tv = new TV();

        System.out.println("回到了家");
        light.on();
        redio.on();
        tv.on();

        System.out.println("要离开家了");
        light.off();
        redio.off();
        tv.off();
    }

测试结果

设计模式(9)外观模式第7张

我们发现,回到家需要打开这么多东西,这对于上班回来疲惫的我们实在是太过于煎熬了,那能不能一下子就把所有的动作都执行了呢?方法是有的,就是使用外观模式,我们只需要执行回家这个动作,就能实现这一系列的动作,做一个总和的操作。

设计模式(9)外观模式第8张

添加的代码如下

设计模式(9)外观模式第9张设计模式(9)外观模式第10张
public class HomeAction {

    private Light light;

    private TV tv;

    private Redio redio;

    public HomeAction(Light light, TV tv, Redio redio) {
        this.light = light;
        this.tv = tv;
        this.redio = redio;
    }

    public void getHome() {
        light.on();
        tv.on();
        redio.on();
    }

    public void leaveHome() {
        light.off();
        tv.off();
        redio.off();
    }
}
HomeAction

测试代码

public static void main(String[] args) {
        Light light = new Light();
        Redio redio = new Redio();
        TV tv = new TV();

        HomeAction homeAction = new HomeAction(light, tv, redio);
        System.out.println("回到了家");
        homeAction.getHome();
        System.out.println("要离开家了");
        homeAction.leaveHome();
    }

测试结果

设计模式(9)外观模式第11张

外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观模式定义一个高层的接口,让子系统更容易使用。

外观模式并不是用来给接口添加新的功能,它是用减少外部和子系统的交互,松散耦合,从而让外部能够更简单地使用子系统。

免责声明:文章转载自《设计模式(9)外观模式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇redis的zset结构跳表TypeError: Identifier 'assert' has already been declared下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

生成uuid 和 检验

//注意replaceAll前面的是正则表达式 String uuid = UUID.randomUUID().toString().replaceAll("-",""); System.out.println(uuid);// System.out.println(uuid.length()); 时间戳:System.currentTimeMillis(...

20169205实验一 Java开发环境的熟悉(Linux+IDEA)

20169205实验一 Java开发环境的熟悉(Linux+IDEA) 实验内容及步骤 使用JDK编译、运行简单的Java程序 打开windows下的cmd → 输入cd Code命令进入Code目录 → 输入md 20169205建立以自己学号命名的文件夹 → 输入cd 20169205进入文件夹 → 输入md exp1建立“实验一”文件夹 → 输入cd...

explorer.exe命令行

explorer.exe命令行 说明: 当进程中没有explorer.exe时,运行explorer.exe即启动外壳程序;当外壳程序已经启动时,运行explorer.exe将会打开“我的文档"。 参数 /n 为默认选择内容打开一个新的单窗格窗口。默认选择内容通常是安装windows的驱动器的根目录 /e 使用默认视图启动windows资源管理器 /roo...

C# 与 SQLite的操作

1、通过Add References引用SQLite ADO .NET安装目录的bin目录下的System.Data.SQLite.DLL。 2、创建数据库文件:因为始终是个0字节文件,应该利用IO也可以(?!)。 System.Data.SQLite.SQLiteConnection.CreateFile(datasource);3、连接数据库 Syst...

java枚举类型

public class TestEnum { /*最普通的枚举*/ public enum ColorSelect { red, green, yellow, blue; } /* 枚举也可以象一般的类一样添加方法和属性,你可以为它添加静态和非静态的属性或方法,这一切都象你在一般的类中做的那样....

Android内存分析工具

在Android系统开发过程中,经常会要去分析进程的内存的使用情况,简单介绍下Android内存分析的相关工具。 文章参考: 1.dumpsys 2.memory-analysis-command 1.内存的指标 Item 全称 描述 类型 USS Unique Set Size 进程独占的内存(不包含共享库占用的内存) 物理内存 PSS P...