北京行——java基础加强反射之晚会案例
晚会案例
在设计时为了提高程序的灵活性,以及扩展性,以及对程序的低耦合度,更重要的一点是小的框架模型
首先解决业务流程
EveningParty
package cn.binbin; public class EveningParty { public static void main(String[] args) throws Exception { new EveningParty().start(); } private void start() throws Exception { System.out.println("晚会开始......"); Sing sing = null;// 写到这的时候就是干什么,怎么干就去找工厂去做 sing = Factory.sing(); sing.sing(); Dance dance = null; Perform perform = null; System.out.println("晚会结束 ......"); } }
这个是整个业务的流程
下面是工厂类,用来分离干什么和怎么干
Factory
package cn.binbin; import java.util.ResourceBundle; public class Factory { // 在加载配置文件这个块出现了卡壳,由工厂来提供具体的歌手、表演、舞蹈 public static Sing sing() throws Exception { String className = ResourceBundle.getBundle("party").getString("Sing");// 这个配置文件要位于src目录下 Sing sing = (Sing) Class.forName(className).newInstance(); return sing; } public static Dance dance() { return new Xiaohudui(); } public static Perform perform() { return new Zhaobensan(); } }
如何体现代码良好的扩展性呢,这里用到了面向接口编程
这里用到三个总体逻辑业务的接口
Sing Dance Perform 定义了方法 只不过在子类中各自实现了相应的方法
package cn.binbin; public interface Dance { public void dance(); } package cn.binbin; public interface Perform { public void perform(); } package cn.binbin; public interface Sing { public void sing(); }
为了良好的扩充性,下面是类的实现
package cn.binbin; public class Liudehua implements Sing { @Override public void sing() { // TODO Auto-generated method stub System.out.println("刘德华的冰雨"); } } package cn.binbin; public class Zhaobensan implements Perform { @Override public void perform() { // TODO Auto-generated method stub System.out.println("赵本山的卖拐"); } } package cn.binbin; public class Xiaohudui implements Dance { @Override public void dance() { // TODO Auto-generated method stub System.out.println("小虎队的霹雳舞"); } }
总结:通过这个小程序,我们能够应用反射让程序能够有比较大的灵活性,而且操作方便,也体现了一个小框架的原理(这个地方时我现在对框架的理解,不知道对不对哦,以后学习到框架后若有变化就回来再改正)