--------------------- android培训、java培训、java学习型技术博客、期待与您交流! ----------------------
面向对象的问题分析:
分析一个问题,首先要在脑海中构造出这么个场景,然后从面相对象的角度出发,分析这个场景中有多少个对象,这些对象哪些可以抽象成类,这个类又有什么属性,什么方法,最后要从人的角度出发去修改这段代码更加符合日常生活习惯
本案例分析
窗口:普通快速 VIP
客户:普通快速 VIP
取号机取了一个号,就代表有一个客户,所以需要一个号码管理对象,只要产生了号码就代表有客户
由于三类客户号码完全独立,因此需要三个去浩气即三个号码管理器对象
由于这三个号码管理器由同一个号码机器管理,因此号码机器要设计成单例,而号码机器负责产生这三个号码管理器的对象,每个号码管理器都需要一个产生号码(产生客户),和服务窗口叫号的一个方法
号码管理器
import java.util.ArrayList;
import java.util.List;
publicclass NumberManager {
//上一次的号码
intlastNum = 1;
//排队的号码集合
List<Integer> list = new ArrayList<Integer>();
//产生新号码与取号互斥
publicsynchronizedint generateNewManager()
{
//产生的号码需要存进集合
list.add(lastNum);
returnlastNum++;
}
//服务窗口取号与产号互斥
publicsynchronizedint fetchServiceNumber()
{
//这里不能list.get(0)
returnlist.remove(0);
}
}
号码机器
publicclass NumberMechine {
//将该类设计成单例,因为只有一个机器,管理三个小的系统用来产生号码
private NumberMechine(){}
privatestatic NumberMechine instance = new NumberMechine();
publicstatic NumberMechine getInstance()
{
returninstance;
}
//产生不同客户号码的三个实例对象,可以理解为三类客户
private NumberManager common = new NumberManager();
private NumberManager quick = new NumberManager();
private NumberManager VIP = new NumberManager();
public NumberManager getCommon() {
returncommon;
}
public NumberManager getQuick() {
returnquick;
}
public NumberManager getVIP() {
returnVIP;
}
}
服务窗口
//服务窗口,叫号的方法时自己的
publicclass ServiceWindow {
//使用枚举来确定客户类型;
private Type type = Type.COMMON;
//窗口号
privateintwindowID = 1;
//人性化输出
String name = "第"+windowID+type+"窗口";
publicvoid start(){
Executors.newSingleThreadExecutor().execute(
new Runnable(){
@Override
publicvoid run() {
while(true)
{
switch(type)
{
caseCOMMON:
//随机生成休息时间
long serviceTime = new Random().nextInt(10);
System.out.println(name+"任务获取中");
//获取产生的号码
Integer i = NumberMechine.getInstance().getCommon().fetchServiceNumber();
if(i != null){
try {
Thread.sleep(serviceTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("服务ing");
}else{
try {
Thread.sleep(1000);
System.out.println(name+"取号失败");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
break;
caseQUICK:
//随机生成休息时间
long serviceTime1 = new Random().nextInt(10);
System.out.println(name+"任务获取中");
//获取产生的号码
Integer j = NumberMechine.getInstance().getQuick().fetchServiceNumber();
if(j != null){
try {
Thread.sleep(serviceTime1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("服务ing");
}else{
try {
Thread.sleep(1000);
System.out.println(name+"取号失败");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
break;
caseVIP:
//随机生成休息时间
long serviceTime2 = new Random().nextInt(10);
System.out.println(name+"任务获取中");
//获取产生的号码
Integer k = NumberMechine.getInstance().getVIP().fetchServiceNumber();
if(k != null){
try {
Thread.sleep(serviceTime2);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("服务ing");
}else{
try {
Thread.sleep(1000);
System.out.println(name+"取号失败");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
break;
}
}
}
});
}
publicvoid setType(Type type) {
this.type = type;
}
publicvoid setWindowID(int windowID) {
this.windowID = windowID;
}
}
客户类型枚举
publicenum Type {
COMMON,QUICK,VIP;
//重写toString方法用于输出客户类型名,精益求精
@Override
public String toString() {
switch(this)
{
caseCOMMON:return"普通";
caseQUICK:return"快速";
caseVIP:return"vip";
}
returnnull;
}
}
总结。。
拿到一个问题分三步去做
首先分析场景,剖析对象,准确的找出对象并定义好对象需要的参数和方法
将该问题通过java语言去描述
精益求精,修改每一个细节,包括代码的编写或者枚举,泛型等新技术的应用等
相关推荐
JAVA程序员面试的常用面试题讲解视频,非常到位
黑马程序员入学面试题,复习必备,事半功倍。
02-7K月薪面试题破解之二_银行业务调度系统视频教程 02-7K月薪面试题破解之二_银行业务调度系统视频教程 02-7K月薪面试题破解之二_银行业务调度系统视频教程 02-7K月薪面试题破解之二_银行业务调度系统视频教程 02-...
java面试题集_java面试题集 java面试题集_java面试题集 java面试题集_java面试题集 java面试题集_java面试题集
java面试题包括基础和提高部分,是毕业生复习找工作的极好备战资料
有关java的面试题及相关解析教程,还是比较全面的
最新_互联网公司招聘_笔试_开发_java面试题_常见面试_编程.pdf
java 面试题 面试 程序员java 面试题 面试 程序员java 面试题 面试 程序员java 面试题 面试 程序员java 面试题 面试 程序员java 面试题 面试 程序员
java程序员,面试必须知识,常见面试题
java面试题,最新50题,带答案.初级工程师,可以下载看看
java程序员面试题java程序员面试题java程序员面试题java程序员面试题java程序员面试题java程序员面试题
最新_互联网公司招聘_笔试_开发_JAVA程序员面试题.pdf
java中级程序员面试题 java程序员面试题 java工程师面试题
java程序员,面试必须知识,常见面试题
最新_互联网公司招聘_笔试_开发_【Java常见面试题】_java常见面试题及答案.pdf
java 2018 最新面试大纲以及部分面试题
JAVA就业面试题264道_以及答案 JAVA就业面试题264道_以及答案 JAVA就业面试题264道_以及答案 JAVA就业面试题264道_以及答案 JAVA就业面试题264道_以及答案 JAVA就业面试题264道_以及答案 JAVA就业面试题264道_以及...
我们培训班刚发的面试题,2018年黑马最新程序员面试宝典+题库,内容包含大量java程序员初级知识点,以及框架的应用,js的基础。需要的赶紧下载准备面试吧. 2019年黑马最新版面试宝典题库 黑马 最新版面试 宝典题库
Java程序员面试Java程序员面试Java程序员面试Java程序员面试Java程序员面试Java程序员面试
非常好的Java程序员面试试题,SQL基础知识,非常不催哦、、