常见设计模式之【外观模式】

来源:互联网 发布:xampp mac 修改根目录 编辑:程序博客网 时间:2024/05/21 10:22

晚上发了几个小时,总结出来给大家分享一下,查看书籍和一些资料,下面是我对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{@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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带来更好的理解........有什么理解不对的地方,请各位指正   谢谢!


 

原创粉丝点击