Java设计模式以外观模式

 1、简介java

    外观模式(Facade),隐藏内部各子系统的细节与复杂性,向客户端提供一个同一的调用接口,使得复杂系统易于被访问和使用。spa

 

     外观模式,简单点讲就是把复杂的各个子系统组合成一个接口,提供给客户使用。如上图,主要涉及3个重要角色:3d

一、子系统角色:实现子系统的逻辑功能。对于客户端来讲是未知的,子系统之间能够有交互。blog

二、门户角色:核心角色。供客户端调用,熟悉内部子系统功能。根据客户需求对子系统进行功能对组合,抽象为一个接口。接口

三、客户角色:经过调用Facade接口来完成要实现的功能it

 

2、实战class

    假设有一栋别墅,里面有不少门,好比卧室门、大厅门、厨房门,主人出远门以前必需要把这些门关上,通常的作法就是一个一个关上,若是采用外观模式,能够提供一个总开关,统一对全部门进行开关控制。扩展

首先定义一个关门操做的接口:方法

public interface Door {
    public void closeDoor();
}

  

卧室门、大厅门、厨房门分别建立一个类,实现Door接口:im

public class BedroomDoor implements Door {
    public void closeDoor() {
        System.out.println("closing bedroom door.");
    }
}
public class KitchenDoor implements Door {
    public void closeDoor() {
        System.out.println("closing kitchen door.");
    }
}
public class HallDoor implements Door {
    public void closeDoor() {
        System.out.println("closing hall door.");
    }
}

 

门面类,对各类门的关门操做进行组合或者合并,只提供惟一的接口

public class DoorFacade {
    
    Door bd = new BedroomDoor();
    Door kd = new KitchenDoor();
    Door hd = new HallDoor();
    
    public void closeDoor() {
        bd.closeDoor();
        kd.closeDoor();
        hd.closeDoor();
    }
}

  

客户端,经过调用门面类的接口便可将全部的门关闭

public class Client {
    public static void main(String[] args) {
        DoorFacade facade = new DoorFacade();
        facade.closeDoor();
    }
}

  

运行结果: 

 

 3、优势

 一、松散耦合:使得客户端和子系统之间解耦,让子系统内部的模块功能更容易扩展和维护;

 二、简单易用:客户端根本不须要知道子系统内部的实现,或者根本不须要知道子系统内部的构成,它只须要跟Facade类交互便可;

三、更好地划分访问层次:有些方法是对系统外的,有些方法是系统内部相互交互的使用的。子系统把那些暴露给外部的功能集中到门面中,这样就能够实现客户端的使用,很好的隐藏了子系                                              统内部的细节。

相关文章
相关标签/搜索