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

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

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