外观模式(Facade Pattern)隐藏系统的复杂性,给调用者提供一个简单的高层接口,来隐藏系统的复杂性。很类似于项目开发中的Service,Service的方法内部封装了对Biz、
SLF4J就是典型的外观模式,SLF4J只提供一个外观接口,具体实现对调用方不可见(常见的实现有log4j、logback等)。
***Mapper等的调用,统一对外部提供一个Service接口。
一、需求举例:
创建一个项目开发团队,有一个Leader,一个初级工程师,1个产品经理。项目预研时,需要Leader技术调研,工程师开发demo;当正式开发项目时,Leader分配工作,产品经理撰写文档,工程师开发。
二、类图:
三、代码实例:
1.工程师类:Engineer
package com.lance.facade;
public class Engineer {
public void develop() {
System.out.println("Engineer write code");
}
public void developDemo() {
System.out.println("Engineer write demo code");
}
}
2.领导类:Leader
package com.lance.facade;
public class Leader {
public void work() {
System.out.println("Leader assign task");
}
public void study() {
System.out.println("technical research");
}
}
3.产品经理类:ProductManager
package com.lance.facade;
public class ProductManager {
public void work() {
System.out.println("ProductManager write requirement document");
}
}
4.外观类:TeamFacade
package com.lance.facade;
public class TeamFacade {
private Engineer engineer;
private Leader leader;
private ProductManager productManager;
public TeamFacade() {
engineer = new Engineer();
leader = new Leader();
productManager = new ProductManager();
}
public void programDevelop() {
leader.work();
productManager.work();
engineer.develop();
}
public void programPreResearch() {
leader.study();
engineer.developDemo();
}
}
5.主类:FacadePattern
package com.lance.facade;
public class FacadePattern {
public static void main(String[] args) {
System.out.println("==========start==========");
TeamFacade teamFacade = new TeamFacade();
teamFacade.programPreResearch();
System.out.println("=======================");
teamFacade.programDevelop();
System.out.println("==========end==========");
}
}
输出结果:
==========start==========
technical research
Engineer write demo code
=======================
Leader assign task
ProductManager write requirement document
Engineer write code
==========end==========
网友评论