如何理解面向对象__案例1_腾讯2015笔试题

试题见Java_Interview栏

 

        最终实现部分由:设计两个类用户类和魔盒库存类,一个接口函数,一个接口实现函数,一个测试函数test构成;

  1.         首先;先实例化一个user1和一个操作行为OrderOperationImpl();
  2.                 在C++中在类的设计的时候会有构造函数,而Java中习惯用get和set方法来设置初始化参数;因此这里接着两个set函数;
  3.                 这是做一个user1的执行函数确定三个行为(订单创建行为,用户积分扣除行为,魔盒库存减1行为)都成功的时候,返回boolean;=下单成功;

1、User类

/**
 * 用户类
 * @author
 *
 */
public class User  {
    
    private int id;      // 用户ID
    private int credit;  // 用户积分
    
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getCredit() {
        return credit;
    }
    public void setCredit(int credit) {
        this.credit = credit;
    }
}
View Code

2、魔盒库存类

/**
 * 魔盒库存类
 * @author 
 *
 */
public class BoxStock {
    
    private volatile static BoxStock boxStock; 
    private int currentNumOfBox = 500000;
    private BoxStock (){}  
    /**
     * 获取BoxStock的实例
     * @return BoxStock实例
     */
    public static BoxStock getBoxStock() {  
        if (boxStock == null) {  
            synchronized (BoxStock.class) {  
                if (boxStock == null) {  
                    boxStock = new BoxStock();  
                }  
            }  
        }  
        return boxStock;  
    }
    
    /**
     * 获取当前剩余的魔盒数
     * @return 剩余的魔盒数
     */
    public int getCurrentNumOfBox() {
        return currentNumOfBox;
    }
    
    /**
     * 设置魔盒数
     * @param currentNumOfBox 新的魔盒数
     */
    public void setCurrentNumOfBox(int currentNumOfBox) {
        this.currentNumOfBox = currentNumOfBox;
    }
}
View Code

3、订单执行接口类:

public interface OrderOperation {
    /**
     * 创建订单
     * @param user 用户
     * @return 创建是否成功
     */
    public boolean createOrder(User user);
    
    /**
     * 扣除用户积分
     * @param user 用户
     * @return 积分扣减是否成功
     */
    public boolean minusCredit(User user);
    
    /**
     * 扣除天猫盒子
     * @return 扣除是否成功
     */
    public boolean minusBoxStock();
    
    /**
     * 下单
     * @param user 下单的用户
     * @return 下单是否成功
     */
    public boolean OrderTemplet(User user);
}
View Code

4、订单执行类

public class OrderOperationImpl implements OrderOperation {
    BoxStock stock = BoxStock.getBoxStock();
    @Override
    public boolean createOrder(User user) {
        // TODO Auto-generated method stub
        
        if(stock.getCurrentNumOfBox() > 0 && user.getCredit() >= 99) {
            return true; 
        }
        return false;
    }

    @Override
    public boolean minusCredit(User user) {
        
        if(user.getCredit() >= 99) {
            user.setCredit(user.getCredit() - 99);
            return true;
        }
        
        return false;
    }

    @Override
    public boolean minusBoxStock() {
        // TODO Auto-generated method stub
        if(stock.getCurrentNumOfBox() > 0) {
            stock.setCurrentNumOfBox(stock.getCurrentNumOfBox() - 1);
            return true;
        }
        return false;
    }
    
    public boolean OrderTemplet(User user) {
        if(this.createOrder(user)) {
            if(this.minusCredit(user)) {
                if(this.minusBoxStock()) {
                    return true;
                }
            }
        }
        
        return false;
    }
}
View Code

5、测试test  

public class test {
        
    public static void main(String[] args) {
        OrderOperationImpl op = new OrderOperationImpl();
        User user1 = new User();
        
        user1.setCredit(1000);   //设置用户积分总数和用户 ID
        user1.setId(88);
        
        if(op.OrderTemplet(user1)) {
            System.out.println("下单成功");
        }
        else System.out.println("下单失败");
    }
}
View Code

          之前没有设置初始化参数,所以已知订单失败;这里充分理解了C++的构造函数初始化和Java的参数初始化的不同;

          

 

posted @ 2015-07-28 17:32  好想雨的云  阅读(163)  评论(0编辑  收藏  举报