模拟客户关系与股票代理(不具备任何实用性)

(声明:不具有实用性,我只是记录做题的思维与过程)

一、客户关系处理

以下代码实现一个简单客户关系中通过工厂对象来常见客户对象的功能。客户分为创建成功的客户和空客户。空客户对象是当不满足特定条件时创建或获取的对象。类之间的关系如图所示:

这题主要就是让创建客户对象,然后通过调用getVustomer()函数判断客户名字是否在指定的数组中。

 

 

package com.School.priv.my;
    abstract class Customer{
        protected String name;
        abstract boolean isNil();
        abstract String getName();
        
    }
    class RealCustomer extends Customer{
        public RealCustomer (String name){this.name=name;}
        public String getName(){    return name;}
        public boolean isNil(){ return false;}
    }
    
    class NullCustomer extends Customer{
        public boolean isNil() {
            // TODO Auto-generated method stub
            return true;
        }

        public String getName() {
            // TODO Auto-generated method stub
            return "Not Available in Customer Database";
        }
        
    }
    class Customerfactory{
        public String[] names={"Rob","Joe","Julie"};
        public Customer getCustomer (String name){
            for(int i=0;i<names.length;i++){
                if(names[i].equals(name)){   //调用equals 判断名字是否在数组集合内
                    return new RealCustomer (name);
                }
                
            }
            return new NullCustomer ();    //当不满足时创建一个空对象
        }
    }
public class CrM{
    public void getCustomer(){
        Customerfactory cf=new Customerfactory();
        Customer customer1=cf.getCustomer("Rob");
        Customer customer2=cf.getCustomer("Bob");
        Customer customer3=cf.getCustomer("Julie");
        Customer customer4=cf.getCustomer("Laura");
        System.out.println("customers");
        System.out.println(customer1.getName());
        System.out.println(customer2.getName());
        System.out.println(customer3.getName());
        System.out.println(customer4.getName());

    }
    public static void main(String[] args) {
        CrM cust=new CrM();
        cust.getCustomer();
    }
}
 

 

运行结果如下:

customers
Rob
Not Available in Customer Database
Julie
Not Available in Customer Database

 

二、在股票交易中,股票代理根据客户发出的股票操作提示进行股票的买卖操作。其类图如下:

分析:交易中,股票代理根据客户发出的股票操作只是进行股票的买卖操作。

     Stock类定义两个操作buy和sell,分别实现买和卖的操作。

    Order接口声明接口execute,表示执行股票交易(即买和卖)方法接口。

   

Broker类实现接受客户的买卖指示takeOrder,接收BuyStock或者SellStock的实例。

placeOrders实现将所有买卖股票的指示进行实际买入和卖出操作,即采用for循环,对每个orderList中的Stock实例,调用在BuyStock和SellStock中实现 的execute

StockCommand主要是根据操作指示进行股票交易,在main中创建交易的对象。

package com.School.priv.my;

import java.util.ArrayList;
import java.util.List;

        class Stock {
            private String name;
            private int quantity;
            public Stock ( String name,int quantity){
                this.name=name;
                this.quantity=quantity;
            }
            
            public void buy(){
                System.out.println("[买进]:"+name+",数量:"+quantity);
            }
            public  void sell(){
                System.out.println("[卖出]:"+name+",数量:"+quantity);
            }
        }
        
        interface Order{
            void execute();
        }
        
        class BuyStock implements Order{
            private Stock stock;
            public BuyStock (Stock stock){this.stock=stock;}
            public void execute(){stock.buy();}
        }
        
        //类Sell实现和BuyStock类似
        class SellStock implements Order{
            private Stock stock;
            public SellStock (Stock stock){this.stock=stock;}
            public void execute(){stock.sell();}
        }
        class Broker{
            private List<Order> orderList=new ArrayList<Order>();
            public void takeOrder(Order order){orderList.add(order);}
            public void placeOrders(){
                for(Order order:orderList){
                    order.execute();
                }
                orderList.clear();
            }
        }
public class StockCommand {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Stock aStock=new Stock("股票A", 10);
        Stock bStock=new Stock("股票B", 20);
        
        Order buyOrder=new BuyStock(aStock);
        Order sellOrder=new SellStock(bStock);
        
        Broker broker=new Broker();
        broker.takeOrder(buyOrder);
        broker.takeOrder(sellOrder);
        broker.placeOrders();
    }

}

 

运行结果如下

[买进]:股票A,数量:10
[卖出]:股票B,数量:20

 

 

 

(实在没啥经验和技术,只能通过重复来让自己不那么菜)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值