首页 > 技术文章 > 设计模式之门面模式

dahao1020 2016-05-28 16:15 原文

门面模式

门面模式是把具体的实现放在自己内部,对外提供一个外观给外部去调用。让使用者可以很方便地使用它。这样可以做到内部的变更交给内部自己去处理,使得责任单一。也让我们的系统不需要暴露太多的细节给外部。

 

实例代码

public class User {
    
    private String name;
    
    private String password;

    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;
    }
    
}

/**
 * 消息体
 * @author wxh
 * @vertion 1.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;
    }
    
}

/**
 * 创建用户的服务接口
 * @author wxh
 * @vertion 1.0
 */
public interface ICreateUserService {
    
    boolean createrUser( User user ); 

}

/**
 * 修改用户密码的服务接口
 * @author wxh
 * @vertion 1.0
 */
public interface IPasswordService {
    
    boolean changePassword( String name, String newPassword );

}

/**
 * 处理用户信息的服务接口
 * @author wxh
 * @vertion 1.0
 */
public interface IUserService {
    
    Status createUser(String name, String password);
    
    Status changeUserPassword(String name, String password);

}

/**
 * UserService其实就是一个对外公开的门面
 * @author wxh
 * @vertion 1.0
 */
public class UserService implements IUserService{

    private ICreateUserService createUserService;
    
    private IPasswordService passwordService;
    
    @Override
    public Status createUser(String name, String password) {
        Status status = new Status();
        
        User user = new User();
        user.setName( name );
        user.setPassword( password );
        
        //隐藏具体的实现细节
        boolean result = createUserService.createrUser( user );
        
        if ( result ) {
            status.setCode(0);
            status.setMessage("用户创建成功!");
        } else {
            status.setCode(-1);
            status.setMessage("用户创建失败!");
        }
        return status;
    }

    @Override
    public Status changeUserPassword(String name, String newPassword) {
        Status status = new Status();
        
        //隐藏具体的实现细节
        boolean result = passwordService.changePassword(name, newPassword);
        
        if ( result ) {
            status.setCode(0);
            status.setMessage("密码修改成功!");
        } else {
            status.setCode(-1);
            status.setMessage("密码修改失败!");
        }
        return status;
    }

}

 

推荐阅读