【设计模式】外观模式

设计模式之外观模式

外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,使子系统更容易使用。

应用场景

  • 因为子系统随着发展会变更的更复杂,客户端想更简单统一给子系统建立一个公共的调用方式。这样即使子系统的再增加可重用性而变得更加复杂,客户端也不必知道,因为客户端往往不需要针对某一个子系统进行特定的定制化。

  • 实现了子系统与客户之间的松耦合关系,这使得子系统的组件变化不会影响到调用它的客户类,只需要调整外观类即可。

例子中,每次开机的时候都要启动mysql,apache服务,两个还好,要是有更多服务岂不是很恼人,每次都要敲一大堆命令来开启服务。这时候可以使用外观模式,将所有服务加入到外观类中,每次开机只用调用外观类中的接口就行了。来达到简化客户端使用的目的。

代码

子系统接口

public interface Services {
    void start();
    void stop();
    void restart();
}

mysql服务

public class MysqlService implements Services {
    @Override
    public void start() {
        System.out.println("mysql is started");
    }

    @Override
    public void stop() {
        System.out.println("mysql is stopped");
    }

    @Override
    public void restart() {
        System.out.println("mysql is restart");
    }
}

apache服务

public class ApacheService implements Services {
    @Override
    public void start() {
        System.out.println("apache is started");
    }

    @Override
    public void stop() {
        System.out.println("apache is stopped");
    }

    @Override
    public void restart() {
        System.out.println("apache is restart");
    }
}

外观类

public class Facade {
    List<Services> services;

    public Facade() {
        services = new ArrayList<>();
    }

    public void addService(Services services){
        this.services.add(services);
    }

    public void start(){
        for (Services services : this.services){
            services.start();
        }
    }

    public void stop(){
        for (Services services : this.services){
            services.stop();
        }
    }

    public void restart(){
        for (Services services : this.services){
            services.restart();
        }
    }
}

客户端调用

public class App {
    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.addService(new MysqlService());
        facade.addService(new ApacheService());
        facade.start();
        facade.stop();
    }
}

结果

mysql is started
apache is started
mysql is stopped
apache is stopped

文章作者: Ciwei
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Ciwei !
 上一篇
sealos2.0安装kubernetes的ha集群 sealos2.0安装kubernetes的ha集群
Sealos 2.0支持kubernetes 1.14.0 以上版本,HA不再依赖keeplived与haproxy, 通过ipvs直接代理masters节点 通过lvscare健康检测masters, 是一种非常先进且稳定的HA方式。安装
2019-08-01
下一篇 
【设计模式】状态模式 【设计模式】状态模式
设计模式之状态模式状态模式是对象的行为模式。状态模式允许一个对象在其内部状态改变的时候改变其行为。这个对象看上去就像是改变了它的类一样。 应用场景 对象的行为取决于其状态,并且必须根据该状态在运行时更改其行为。 通常,几个操作将包含相
2019-07-31
  目录