zoukankan      html  css  js  c++  java
  • 如何理解面向对象__案例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的参数初始化的不同;

              

  • 相关阅读:
    WebSQL的基本使用过程
    Windows下Apache2.2+PHP5安装步骤
    DNS解析过程
    MongoDBTemplate多条件查询的问题
    解决Java工程URL路径中含有中文的情况
    Maven配置默认使用的JDK版本
    Mockito when(...).thenReturn(...)和doReturn(...).when(...)的区别
    如何正确对tomcat host进行配置
    对Java动态代理的理解
    对Mybatis的理解
  • 原文地址:https://www.cnblogs.com/snowwhite/p/4683569.html
Copyright © 2011-2022 走看看