如何理解面向对象__案例1_腾讯2015笔试题
试题见Java_Interview栏
最终实现部分由:设计两个类用户类和魔盒库存类,一个接口函数,一个接口实现函数,一个测试函数test构成;
- 首先;先实例化一个user1和一个操作行为OrderOperationImpl();
- 在C++中在类的设计的时候会有构造函数,而Java中习惯用get和set方法来设置初始化参数;因此这里接着两个set函数;
- 这是做一个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; } }
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; } }
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); }
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; } }
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("下单失败"); } }
之前没有设置初始化参数,所以已知订单失败;这里充分理解了C++的构造函数初始化和Java的参数初始化的不同;
每天都做更好的自己,不纠结于输赢成败