zoukankan      html  css  js  c++  java
  • Java

    //车票类
    public class Ticker {
    //车票应该有发出地、终点、票价等信息
        private String start;
        private String end;
        private Float price;
        public Ticker(){}
        public Ticker(String start, String end, Float price) {
            this.start = start;
            this.end = end;
            this.price = price;
        }
    
        public String toString(){
            StringBuilder stringBuilder = new StringBuilder("[");
            stringBuilder.append(this.start);
            stringBuilder.append("--->");
            stringBuilder.append(this.end);
            stringBuilder.append(" : ");
            stringBuilder.append(this.price);
            stringBuilder.append("]");
            return stringBuilder.toString();
        }
    
        public String getStart() {
            return start;
        }
    
        public void setStart(String start) {
            this.start = start;
        }
    
        public String getEnd() {
            return end;
        }
    
        public void setEnd(String end) {
            this.end = end;
        }
    
        public Float getPrice() {
            return price;
        }
    
        public void setPrice(Float price) {
            this.price = price;
        }
    }
    
    import java.util.Vector;
    
    //火车站类
    public class TrainStation {
        //火车站内有多个窗口,同时开始售票
        //此类需要产生很多很多的票使多个窗口开始售票。
        //但是火车站只有一个,不能NEW多个,所以需要一个单例模式
        private static TrainStation trainStation = new TrainStation();
        private TrainStation(){}
        public static TrainStation getTrainStation(){
            return trainStation;
        }
    
        //票是在类加载时就需要产生的,所以需要用程序块,并且将票存储在集合内
        //集合便于更改,所以不用数组存放
        //Vector集合线程安全,且不会产生重复的 内容,
        private Vector<Ticker> vector = new Vector<Ticker>();
        {
            for(int i=1;i<=100;i++){
                vector.add(new Ticker("西安站"+i+"座次","北京站",(i%5+5)*30F));
            }
        }
    
        //需要一个方法,用来给窗口票
        //返回类型是Ticker类型的
        public Ticker getTicket(){
            //每给一张票,票就少一张
            try {
                return vector.remove(0);
            }catch (Exception e){
                //如果捕捉到异常,则说明票已经售完了
                return null;
            }
        }
    
    }
    
    //售票窗口类
    public class Window extends Thread{
        //多个窗口需要同时开启,同时售票
        private String name;
    
        public Window(){}
        public Window(String name){
            this.name = name;
        }
        //所以需要在此类中设置Run方法
        //窗口都要售票,需要有一个售票方法
        public void sellTicket(){
            while (true){
                TrainStation trainStation = TrainStation.getTrainStation();
                Ticker ticket = trainStation.getTicket();
                if(ticket==null){
                    System.out.println(this.name+"窗口票已售完!");
                    break;
                }    //重写toString方法,打印对象
                System.out.println("从"+name+"售出:"+ticket);
            }
        }
    
        public void run(){
            sellTicket();
        }
    
    
    }
    
    
    public class Main {
        public static void main(String[] args){
            Window window1 = new Window("西安站1号窗口");
            Window window2 = new Window("西安站2号窗口");
            Window window3 = new Window("西安站3号窗口");
            Window window4 = new Window("西安站4号窗口");
            window1.start();
            window2.start();
            window3.start();
            window4.start();
    
        }
    }
  • 相关阅读:
    【构建工具】《Maven实战》读书笔记
    【网络安全】Dos攻击科普文
    谈谈集合.CopyOnWriteArrayList
    谈谈集合.List
    小程序开发--移动端分辨率与rpx
    跟面向对象卯上了,看看ES6的“类”
    捋一捋js面向对象的继承问题
    Canvas的drawImage方法使用
    浏览器内核趣对话
    “茴”字有四种写法,this也是一样
  • 原文地址:https://www.cnblogs.com/yyanghang/p/11291680.html
Copyright © 2011-2022 走看看