陽(yáng)泉住房和城鄉(xiāng)建設(shè)部網(wǎng)站百度官方免費(fèi)下載
目錄
一:背景介紹
二:思路&方案
1.面向過(guò)程
2.面向?qū)ο?/p>
3.面向?qū)ο?反射)
三:過(guò)程
1.面向過(guò)程:原本何老師的作用交給我了米老師來(lái)完成。
2.面向?qū)ο?#xff1a;把開(kāi)門的方法完全交個(gè)何老師,米老師不需要有開(kāi)門的操作
3.面向?qū)ο?反射):米老師不僅僅可以叫何老師來(lái)開(kāi)門,也可以叫其他老師開(kāi)門
四:總結(jié)
一:背景介紹
? ? ? ? 米老師需要開(kāi)辦公室的門,需要進(jìn)入辦公室進(jìn)行工作。這時(shí)候需要何老師來(lái)進(jìn)行開(kāi)門的操作。
二:思路&方案
1.面向過(guò)程
? ? ? ? 何老師管理鑰匙,米老師需要開(kāi)門,何老師把鑰匙方法一個(gè)位置上。米老師到壹佰之后去拿鑰匙?自己去執(zhí)行開(kāi)門的操作。
2.面向?qū)ο?/h3>
? ? ? ? 米老師到達(dá)公司之后,米老師喊一下何老師打開(kāi)辦公室的門,何老師聽(tīng)到消息之后就過(guò)來(lái)開(kāi)門了。
3.面向?qū)ο?反射)
? ? ? ? 米老師到達(dá)公司之后,米老師喊了一下給我開(kāi)一下辦公室的門,聽(tīng)到米老師消息的任意一個(gè)老師都可以過(guò)來(lái)開(kāi)門。
三:過(guò)程
1.面向過(guò)程:原本何老師的作用交給我了米老師來(lái)完成。
代碼
public class Client {public static void main(String[] args) {System.out.println("米老師:我需要開(kāi)門");System.out.println("何老師:米老師,鑰匙放在前臺(tái)了,您開(kāi)一下吧");System.out.println("米老師:去前臺(tái)拿鑰匙自己去開(kāi)門了");}
}
效果
2.面向?qū)ο?#xff1a;把開(kāi)門的方法完全交個(gè)何老師,米老師不需要有開(kāi)門的操作
客戶端
public class Client {public static void main(String[] args) {Notice notice=new Notice();notice.notice();}
}
業(yè)務(wù)封裝類
public class Notice {private void TeahcerMiDependTeacherHeBusiness(){ReceiveMsg receiveMsgTeacherHe=new ReceiveMsg();receiveMsgTeacherHe.receiveMsg(new SendMsg());}public void notice(){this.TeahcerMiDependTeacherHeBusiness();}
}
發(fā)消息類
public class SendMsg {public void sendMsg(){System.out.println("米老師:我需要開(kāi)一下門");}
}
收消息類
public class ReceiveMsg {private void open(){System.out.println("何老師:開(kāi)門中。。。。。。門已打開(kāi)");}public void receiveMsg(SendMsg sendMsgTeacherMi){sendMsgTeacherMi.sendMsg();this.open();}
}
結(jié)果
3.面向?qū)ο?反射):米老師不僅僅可以叫何老師來(lái)開(kāi)門,也可以叫其他老師開(kāi)門
客戶端
public class Client {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException, IOException {Notice notice=new Notice();notice.notice();}
}
業(yè)務(wù)封裝類
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();}
}
發(fā)送消息類
public class TeacherMi {public void sendMsg(){System.out.println("我需要開(kāi)一下門");}public void sendMsgAndKey(String room,String key){System.out.println("這是"+room+"以后"+key+"由你來(lái)保管,快開(kāi)門吧");}public static void sendMessage(){System.out.println("幫我開(kāi)一下辦公室的門");}
}
接收消息類
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("請(qǐng)輸入要依賴的類路徑");String className=br.readLine();System.out.println("請(qǐng)輸入要執(zhí)行的方法");String methodName=br.readLine();System.out.println("請(qǐng)輸入方法要傳入的第一個(gè)參數(shù)");String roomName=br.readLine();System.out.println("請(qǐng)輸入方法要傳入的第一個(gè)參數(shù)");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("收到了,我來(lái)開(kāi)門了");this.open();}private void open(){System.out.println("正在開(kāi)門中。。。。。。。。。。。 門開(kāi)了");}
}
結(jié)果
四:總結(jié)
????????面向過(guò)程和面向?qū)ο鬀](méi)有好壞之分,只是應(yīng)用的場(chǎng)景不同。我們之所以要用面向?qū)ο蟮乃枷胧且驗(yàn)槲覀円獮楹笃诘木S護(hù)考慮,這樣我們就需要寫出來(lái)的代碼容易擴(kuò)展,復(fù)用性強(qiáng)。在面向?qū)ο蟮幕A(chǔ)上使用反射,使我們的系統(tǒng)更加的靈活,在運(yùn)行的過(guò)程中我們可以讓給來(lái)開(kāi)門都可以。?