目录
一:背景介绍
二:思路&方案
1.面向过程
2.面向对象
3.面向对象(反射)
三:过程
1.面向过程:原本何老师的作用交给我了米老师来完成。
2.面向对象:把开门的方法完全交个何老师,米老师不需要有开门的操作
3.面向对象(反射):米老师不仅仅可以叫何老师来开门,也可以叫其他老师开门
四:总结
一:背景介绍
米老师需要开办公室的门,需要进入办公室进行工作。这时候需要何老师来进行开门的操作。
二:思路&方案
1.面向过程
何老师管理钥匙,米老师需要开门,何老师把钥匙方法一个位置上。米老师到壹佰之后去拿钥匙 自己去执行开门的操作。
2.面向对象
米老师到达公司之后,米老师喊一下何老师打开办公室的门,何老师听到消息之后就过来开门了。
3.面向对象(反射)
米老师到达公司之后,米老师喊了一下给我开一下办公室的门,听到米老师消息的任意一个老师都可以过来开门。
三:过程
1.面向过程:原本何老师的作用交给我了米老师来完成。
代码
public class Client {
public static void main(String[] args) {
System.out.println("米老师:我需要开门");
System.out.println("何老师:米老师,钥匙放在前台了,您开一下吧");
System.out.println("米老师:去前台拿钥匙自己去开门了");
}
}
效果
2.面向对象:把开门的方法完全交个何老师,米老师不需要有开门的操作
客户端
public class Client {
public static void main(String[] args) {
Notice notice=new Notice();
notice.notice();
}
}
业务封装类
public class Notice {
private void TeahcerMiDependTeacherHeBusiness(){
ReceiveMsg receiveMsgTeacherHe=new ReceiveMsg();
receiveMsgTeacherHe.receiveMsg(new SendMsg());
}
public void notice(){
this.TeahcerMiDependTeacherHeBusiness();
}
}
发消息类
public class SendMsg {
public void sendMsg(){
System.out.println("米老师:我需要开一下门");
}
}
收消息类
public class ReceiveMsg {
private void open(){
System.out.println("何老师:开门中。。。。。。门已打开");
}
public void receiveMsg(SendMsg sendMsgTeacherMi){
sendMsgTeacherMi.sendMsg();
this.open();
}
}
结果
3.面向对象(反射):米老师不仅仅可以叫何老师来开门,也可以叫其他老师开门
客户端
public class Client {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException, IOException {
Notice notice=new Notice();
notice.notice();
}
}
业务封装类
public class Notice {
private void MiAndHeBusiness() throws ClassNotFoundException, InvocationTargetException, IllegalAccessException, NoSuchMethodException, InstantiationException, IOException {
TeacherHe teacherHe = new TeacherHe();
teacherHe.acceptMessage();
}
public void notice() throws ClassNotFoundException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException, IOException {
this.MiAndHeBusiness();
}
}
发送消息类
public class TeacherMi {
public void sendMsg(){
System.out.println("我需要开一下门");
}
public void sendMsgAndKey(String room,String key){
System.out.println("这是"+room+"以后"+key+"由你来保管,快开门吧");
}
public static void sendMessage(){
System.out.println("帮我开一下办公室的门");
}
}
接收消息类
public class TeacherHe {
public void acceptMessage() throws IOException, ClassNotFoundException, InvocationTargetException, IllegalAccessException, NoSuchMethodException, InstantiationException {
this.acceptMsg();
}
private void acceptMsg() throws IllegalAccessException, InvocationTargetException, ClassNotFoundException, NoSuchMethodException, InstantiationException, IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入要依赖的类路径");
String className=br.readLine();
System.out.println("请输入要执行的方法");
String methodName=br.readLine();
System.out.println("请输入方法要传入的第一个参数");
String roomName=br.readLine();
System.out.println("请输入方法要传入的第一个参数");
String keyName=br.readLine();
br.close();
Class sendMsgClass=Class.forName(className);
Method sendMsgMethod= sendMsgClass.getMethod(methodName,String.class,String.class);
Object sender = sendMsgClass.newInstance();
sendMsgMethod.invoke(sender,roomName,keyName);
System.out.println("收到了,我来开门了");
this.open();
}
private void open(){
System.out.println("正在开门中。。。。。。。。。。。 门开了");
}
}
结果
四:总结
面向过程和面向对象没有好坏之分,只是应用的场景不同。我们之所以要用面向对象的思想是因为我们要为后期的维护考虑,这样我们就需要写出来的代码容易扩展,复用性强。在面向对象的基础上使用反射,使我们的系统更加的灵活,在运行的过程中我们可以让给来开门都可以。