设计模式设计模式首页投稿(暂停使用,暂停投稿)

设计模式—外观模式

2016-06-05  本文已影响100人  HJXANDHMR

今天我们来学习另一种结构型模式,它就是外观模式(Facade Pattern)。

模式定义

外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

模式结构

外观模式包含如下角色:

**Facade: ** 外观角色
**SubSystem: **子系统角色

UML图

代码实现

电视遥控器是现实生活中一个比较好的外观模式的运用,遥控器可以控制电源的开源、声音的调整、频道的切换等。这个遥控器就是我们这里说的外观或者门面,而电源、声音、频道切换系统就是我们的子系统。遥控器统一对这些子模块的控制,我想你没有用过多个遥控器来分别控制电源开关、声音控制等功能。下面我们就来简单模拟一下这个系统。

PowerSystem.java

/**
 * 电源控制系统
 */
public class PowerSystem {

    public void powerOn() {
        System.out.println("Power On");
    }

    public void powerOff() {
        System.out.println("Power Off");
    }
}

ChannelSystem.java


/**
 * 频道控制系统
 */
public class ChannelSystem {

    public void next() {
        System.out.println("Next channel ");
    }

    public void previous() {
        System.out.println("Previous channel");
    }
}

PowerSystem.java


/**
 * 电源控制系统
 */
public class PowerSystem {

    public void powerOn() {
        System.out.println("Power On");
    }

    public void powerOff() {
        System.out.println("Power Off");
    }
}

VoiceSystem.java


/**
 * 声音控制系统
 */
public class VoiceSystem {

    public void turnUp() {
        System.out.println("Voice turn Up");
    }

    public void turnDown() {
        System.out.println("Voice turn Down");
    }
}


TvController.java


/**
 * 遥控器
 */
public class TvController {

    private PowerSystem mPowerSystem;
    private VoiceSystem mVoiceSystem;
    private ChannelSystem mChannelSystem;

    public TvController() {
        mPowerSystem = new PowerSystem();
        mVoiceSystem = new VoiceSystem();
        mChannelSystem = new ChannelSystem();
    }

    public void powerOn() {
        mPowerSystem.powerOn();
    }

    public void powerOff() {
        mPowerSystem.powerOff();
    }

    public void turnUp() {
        mVoiceSystem.turnUp();
    }

    public void turnDown() {
        mVoiceSystem.turnDown();
    }

    public void NextChannel() {
        mChannelSystem.next();
    }

    public void PreviousChannel() {
        mChannelSystem.previous();
    }
}

测试类


public class MyClass {

    public static void main(String[] args) {

        TvController tvController = new TvController();
        tvController.powerOn();
        tvController.turnUp();
        tvController.PreviousChannel();
        tvController.powerOff();
    }
}

运行结果

模式分析

根据“单一职责原则”,在软件中将一个系统划分为若干个子系统有利于降低整个系统的复杂性,一个常见的设计目标是使子系统间的通信和相互依赖关系达到最小,而达到该目标的途径之一就是引入一个外观对象,它为子系统的访问提供了一个简单而单一的入口。

外观模式的优点

外观模式的缺点

本博客同步发表在 http://hjxandhmr.github.io/2016/06/05/DesignPattern-Facade/

参考
http://design-patterns.readthedocs.io/zh_CN/latest/structural_patterns/facade.html

上一篇下一篇

猜你喜欢

热点阅读