上一篇的java标准日志出现了日志门面,肯定有人会问什么是门面?
1. 门面模式(Facade Pattern)
门面提供统一的接口去访问多个子系统的不同接口,它为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用。简单地说:通过门面就可使用该系统所有的功能,而不用接触背后复杂的关系
门面模式的组成:
- Client(客户)
- Facade(门面角色)
- Subsystem(子系统)
2. 流程
这里举例看电影的场景,以前看电影需要去电影院看上映列表
,然后买电影票
,最后买爆米花
,客户需接触三个流程。
现通过手机门面我们可将上面三步完成,而只需接触手机这个门面即可
2.1 Subsystem
代码语言:javascript复制// 观影系统
public class MoviesSystem {
public void listMovies() {
System.out.println("上映列表");
}
// other funtion ...
}
代码语言:javascript复制// 购票系统
public class TicketSystem {
public void buyTicket() {
System.out.println("买电影票");
}
public void refundTicket() {
System.out.println("退电影票");
}
// other funtion ...
}
代码语言:javascript复制// 服务系统
public class ServiceSystem {
public void buyPopCorn() {
System.out.println("买爆米花");
}
public void buyCola() {
System.out.println("买可乐");
}
// other funtion ...
}
2.1 Facade
代码语言:javascript复制public class Facade {
MoviesSystem moviesSystem = new MoviesSystem();
TicketSystem ticketSystem = new TicketSystem();
ServiceSystem serviceSystem = new ServiceSystem();
public void watchMovie(){
moviesSystem.listMovies();
ticketSystem.buyTicket();
serviceSystem.buyCola();
}
}
2.3 Client
代码语言:javascript复制public class Client {
public static void main(String[] args) {
Facade facade = new Facade();
facade.watchMovie();
}
}
// 观影列表
// 买电影票
// 买可乐
3. 优势
- 门面让客户和子系统松耦合,所以子系统更容易扩展和维护
- 门面让子系统有统一上层接口,所以客户容易使用,也可自由更改子系统实现(参考日志门面)