常见设计形式之【外观模式】
常见设计模式之【外观模式】
晚上发了几个小时,总结出来给大家分享一下,查看书籍和一些资料,下面是我对Facade模式的理解
老样子,上传demo
package Facade; /** *@Description: Facade模式 *@author Potter *@date 2012-9-7 下午09:35:11 *@version V1.0 */ public class App { public static void main(String[] args) { UserService userService=new UserService(); User user1=new User(); user1.setName("小白"); user1.setPassword("123456"); //功能1:将小白替换成小黑 User user2=new User(); user2.setName("小黑"); user2.setPassword("123456"); Status status=userService.replace(user1,user2); System.out.println("status's code="+status.getCode()+",message="+status.getMessage()); //------------------------ //功能2:比较user3和user4的等级 User user3=new User(); user3.setRank(User.common); User user4=new User(); user4.setRank(User.diamond); Status status2=userService.compareUserRank(user3, user4); System.out.println("status2's code="+status2.getCode()+",message="+status2.getMessage()); } }
服务1接口:
package Facade; /** *@Description: *@author Potter *@date 2012-9-7 下午08:35:02 *@version V1.0 */ public interface IServiceOne { public static final int high=0; public static final int equal=1; public static final int low=2; int compareUserRank(User user1,User user2); }
服务接口2:
package Facade; /** *@Description: *@author Potter *@date 2012-9-7 下午08:35:02 *@version V1.0 */ public interface IServiceTwo { boolean replace(User user1,User user2); }
facade模式核心接口:
package Facade; /** *@Description: Facade模式核心 *@author Potter *@date 2012-9-7 下午08:39:05 *@version V1.0 */ public interface IUserService { Status compareUserRank(User user1,User user2); Status replace(User user1,User user2); }
子系统服务接口实现类:
package Facade; /** *@Description: *@author Potter *@date 2012-9-7 下午09:46:50 *@version V1.0 */ public class UserOption implements IServiceOne,IServiceTwo{ @Override public int compareUserRank(User user1, User user2) { int result=0; if(user1.getRank()>user2.getRank()){ result=high; }else if(user1.getRank()==user2.getRank()){ result=equal; }else{ result=low; } return result; } @Override public boolean replace(User user1, User user2) { if(user2!=null){ user1=user2; return true; } return false; } }
facade模式中介类:
package Facade; /** *@Description: Facade模式中介 *@author Potter *@date 2012-9-7 下午08:42:13 *@version V1.0 */ public class UserService implements IUserService{ private IServiceOne oneService; private IServiceTwo twoService; public UserService(){ UserOption userOption=new UserOption(); oneService=userOption; twoService=userOption; } @Override public Status compareUserRank(User user1, User user2) { int result=oneService.compareUserRank(user1, user2); Status status=new Status(); status.setCode(2); if(result==IServiceOne.high){ status.setMessage("高级"); }else if(result==IServiceOne.equal){ status.setMessage("平级"); }else{ status.setMessage("低级"); } return status; } @Override public Status replace(User user1, User user2) { boolean result=twoService.replace(user1,user2); Status status=new Status(); if(result){ status.setCode(1); status.setMessage("替换成功"); }else{ status.setCode(-1); status.setMessage("替换失败"); } return status; } }
User类:
package Facade; /** *@Description: 用户名类 *@author Potter *@date 2012-9-7 下午08:35:37 *@version V1.0 */ public class User { public static final int common=0;//普通用户 public static final int gold=1;//黄金用户 public static final int diamond=2;//钻石用户 private String name; private String password; private int rank; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getRank() { return rank; } public void setRank(int rank) { this.rank = rank; } }
Status类:
package Facade; /** *@Description: *@author Potter *@date 2012-9-7 下午08:39:46 *@version V1.0 */ public class Status { private int code; private String message; public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
希望对大家facade带来更好的理解........有什么理解不对的地方,请各位指正 谢谢!