GOF23设计模式之外观模式(facade)
一、外观模式概述
外观模式也称为门面模式。
核心:为了系统提供统一的入口,封装子系统的复杂性,便于客户端调用。
二、外观模式场景导入与示例代码
场景:要想自己去注册一个公司,首先去工商局检测命名是否合法,再去质量监督局办理组织机构代码证,再去税务局办理税务登记,最后去工商银行开户。但是使用外观模式,只需要去注册公司的门面,里边的工作人员就会去办理上述证件,简单方便!
1 /** 2 * 工商局 3 * @author CL 4 * 5 */ 6 public interface AIC { 7 void checkName(); //检测命名是否合法 8 } 9 10 /** 11 * 陕西工商局 12 * @author CL 13 * 14 */ 15 class SNAIC implements AIC { 16 17 @Override 18 public void checkName() { 19 System.out.println("在陕西工商局检测名字是否合法!"); 20 } 21 22 }
1 /** 2 * 质监局 3 * @author CL 4 * 5 */ 6 public interface QSB { 7 void orgCodeCertificate(); //办理组织机构代码证 8 } 9 10 class SNQSB implements QSB { 11 12 @Override 13 public void orgCodeCertificate() { 14 System.out.println("在陕西质量监督局办理组织机构代码证!"); 15 } 16 17 }
1 /** 2 * 税务局 3 * @author CL 4 * 5 */ 6 public interface TB { 7 void taxCertificate(); //办理税务登记证 8 } 9 10 class SNTB implements TB { 11 12 @Override 13 public void taxCertificate() { 14 System.out.println("在陕西税务局办理税务登记!"); 15 } 16 17 }
1 /** 2 * 工商银行 3 * @author CL 4 * 5 */ 6 public interface ICBC { 7 void openAccount(); //开户 8 } 9 10 /** 11 * 陕西工商银行 12 * @author CL 13 * 14 */ 15 class SNICBC implements ICBC { 16 17 @Override 18 public void openAccount() { 19 System.out.println("在陕西工商银行开户!"); 20 } 21 22 }
(1)不使用外观模式,自己去注册公司
1 /** 2 * 自己去注册公司 3 * @author CL 4 * 5 */ 6 public class Client { 7 8 public static void main(String[] args) { 9 AIC aic = new SNAIC(); 10 aic.checkName(); 11 12 QSB qsb = new SNQSB(); 13 qsb.orgCodeCertificate(); 14 15 TB tb = new SNTB(); 16 tb.taxCertificate(); 17 18 ICBC icbc = new SNICBC(); 19 icbc.openAccount(); 20 } 21 22 }
控制台输出:
在陕西工商局检测名字是否合法! 在陕西质量监督局办理组织机构代码证! 在陕西税务局办理税务登记! 在陕西工商银行开户!
(2)使用外观模式去注册公司
1 /** 2 * 注册公司的门面对象 3 * @author CL 4 * 5 */ 6 public class RegisterFacade { 7 8 public void register() { 9 AIC aic = new SNAIC(); 10 aic.checkName(); 11 12 QSB qsb = new SNQSB(); 13 qsb.orgCodeCertificate(); 14 15 TB tb = new SNTB(); 16 tb.taxCertificate(); 17 18 ICBC icbc = new SNICBC(); 19 icbc.openAccount(); 20 } 21 }
1 /** 2 * 测试使用外观模式去注册公司 3 * @author CL 4 * 5 */ 6 public class Client { 7 8 public static void main(String[] args) { 9 RegisterFacade register = new RegisterFacade(); 10 register.register(); 11 } 12 13 }
控制台输出:
在陕西工商局检测名字是否合法! 在陕西质量监督局办理组织机构代码证! 在陕西税务局办理税务登记! 在陕西工商银行开户!
三、外观模式常用开发应用场景
(1)JDBC封装后的,commons提供的DBUtils类,Hibernate提供的工具类,Spring JDBC工具类;
(2)…………