项目实战18—面向对象的开门小例子
创始人
2025-05-28 20:28:51
0

一.案例背景
1.一个现实中常见的业务场景:米老师需要进入办公室,需要何老师帮忙开门,或者说需要一个开门的人。
2.面向过程的思路:何老师告诉米老师钥匙在哪里,然后米老师去取了钥匙,最后去开门
3.面向对象思路
对于这个业务场景进行抽象的话,可以抽象出四个类:发消息人类、收消息人类、业务处理类、客户端。
米老师只要喊一句开门,就有人过来把门打开了
二.案例启发
由此可以看出,面向过程的思路只是解决当前的问题,会被当前的地点,当前的人所局限,而面向对象的思路,则可以在此基础上复用,拓展,正所谓:
1.我们注重的是谁来干事,而不是怎么干事
2.我们注重的是有多少人干事,而不是干多少事
三.面向对象代码实现
1.利用抽象、封装、消息监听、事件和委托的形式,抽象出来的四个类分别是:发消息人类、收消息人类、业务处理类、客户端。
sendMessage发消息人类

package com.opendoor;public class sendMessage {public void sendMessage(){System.out.println("我是米老老师,我需要开门");}
}

receiveMessage接收消息的人类

package com.opendoor;public class receiveMessage {private void openDoor(){System.out.println("我是何老师,我来开门了");}public void receiveMessage(sendMessage teacherMi){teacherMi.sendMessage();this.openDoor();}
}

Notice业务处理类

package com.opendoor;public class Notice {private void business(){receiveMessage teacherHe =new receiveMessage();teacherHe.receiveMessage(new sendMessage());}public void notice(){this.business();}
}

Client客户端类

package com.opendoor;public class Client {public static void main(String[] args) {// write your code hereNotice notice=new Notice();notice.notice();}
}

2.面向对象加入反射的形式(不再被人所局限,更加灵活),同样抽象出四个类
sendMessage发消息人类

package com.opendoorReflect;import java.lang.reflect.Method;//发消息人类
public class sendMessage {public void sendMessage(String className,String methodName) throws Exception{System.out.println("米老师发消息");//通过反射获取对象和方法Class classobj=Class.forName(className);Object teacherHe = classobj.newInstance();Method methodObj=classobj.getMethod(methodName);methodObj.invoke(teacherHe,null);}
}

receiveMessage接收消息的人类

package com.opendoorReflect;
//接收消息人类
public class receiveMessage {private void openDoor(){System.out.println("接收消息的人:好的,已开门");}public void receiveMessage(){this.openDoor();}
}

Notice业务处理类

package com.opendoorReflect;import java.util.Scanner;public class Notice {private void business(String className,String methodName) throws Exception{sendMessage sendMessage = new sendMessage();sendMessage.sendMessage(className, methodName);}private void getParam() throws Exception{//通过new Scanner(System.in)创建一个Scnner类型的名叫scanner的对象//控制台会一致等待输入,直到敲回车键结束,把所输入的内容传给scannerScanner scanner =new Scanner(System.in);System.out.println("请输入类名");//nextline()方法的作用是获取当前行的输入内容//返回得到的是回车键之前的所有字符,包括空格String classname =scanner.nextLine();System.out.println("请输入方法名");String methodName = scanner.nextLine();this.business(classname, methodName);}public void notice() throws Exception{this.getParam();}
}

Client客户端类

package com.opendoorReflect;public class Client {public static void main(String[] args) throws Exception {Notice notice=new Notice();notice.notice();}
}

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...