定义:它为子系统中的一组接口提供一个统一的高层接口。这一接口使得子系统更加容易使用。(体现为service和dao,一个service可以调用多个dao)
目的:对多个方法进行封装,提供出一个统一的接口。
优点:1.实现客户端和子系统的松耦合,让子系统内部的模块能更容易扩展和维护
2.对客户实现了封装
3.提供了统一的接口
缺点:1.增加新的子系统可能需要修改外观类或客户端的源代码。
2.代码过于臃肿
类图:
代码:
方法接口
1. public interface Login{ 2. 3. public void login(); 4. }
1. public interface SelectData{ 2. 3. public void getData(); 4. }
1. public interface Check{ 2. 3. public void check(); 4. }
方法的实现
1. public class LoginImpl implements Login { 2. 3. public void login(){ 4. system.out.print("登录输入") 5. }; 6. }
1. public class SelectDataImpl implements SelectData{ 2. 3. public void getData(){ 4. system.out.print("根据登录获取数据") 5. }; 6. }
1. public class CheckImpl implements Check{ 2. 3. public void check(){ 4. system.out.print("检查验证") 5. }; 6. }
外观角色(提供统一的接口)
1. public class LoginForPerson { 2. private LoginImpl loginImpl; 3. private SelectDataImpl selectDataImpl; 4. private CheckImpl checkImpl; 5. 6. public ShapeMaker() { 7. loginImpl= new LoginImpl(); 8. selectDataImpl= new SelectDataImpl(); 9. checkImpl= new CheckImpl(); 10. } 11. 12. //提供验证功能 13. public void allLogin() { 14. loginImpl.login(); 15. selectDataImpl.getData(); 16. checkImpl.check(); 17. } 18. 19. //只登录不验证 20. public void onlyLogin() { 21. loginImpl.login(); 22. } 23. 24. }
调用
1. public class FacadeDemo { 2. public static void main(String[] args) { 3. LoginForPerson object = new LoginForPerson(); 4. object.onlyLogin(); 5. ///或者挨个调用 6. new LoginImpl().login(); 7. new SelectDataImpl().getData(); 8. new CheckImpl().check(); 9. 10. } 11. }