利用反射实现简单工厂类,可以任意增加子类
2016-04-11 10:59
309 查看
1.基础的简单工厂类
基础的简单工厂类最大的问题就是新增子类后,修改代码的问题,但是有了反射机制的引入,实现了可以任意增加子类且不会增加代码的维护难度。
//简单工厂设计模式 interface Vehicle //写一个接口,但是我更喜欢叫它标准,所有符合这个标准的类均归为同一类 { public void howToWork(); } class Car implements Vehicle //汽车类实现交通工具接口(或者说是汽车类符合交通工具标准) { public void howToWork() { System.out.println("开车去!"); } } class Bike implements Vehicle { public void howToWork() { System.out.println("骑车去!"); } } class Airplane implements Vehicle { public void howToWork() { System.out.println("坐飞机去!"); } } class Factory //工厂类 { public static Vehicle create(String vehicle) //实现一个静态方法用于创建实例 { Vehicle sample = null; switch(vehicle) { case "car": sample = new Car(); break;</span><span style="font-size:18px;"> case "bike": sample = new Bike(); break; case "airplane" : sample = new Airplane(); break; } return sample; } } public class SimpleFactory { public static void main(String args[]) { Vehicle vehicle = Factory.create(args[0]); vehicle.howToWork(); } }</span>2.利用反射实现简单工厂类的解耦合
package reflect; //工厂设计模式升级版,简单工厂也可以解决之前难以维护的问题 interface Fruit // 定义接口 { public void eat(); } class Apple implements Fruit { @Override public void eat() { // TODO Auto-generated method stub System.out.println("eat Apple"); } } class Banana implements Fruit { @Override public void eat() { // TODO Auto-generated method stub System.out.println("eat Banana"); } } class Orange implements Fruit { @Override public void eat() { // TODO Auto-generated method stub System.out.println("eat Orange"); } } class Factory { public static Fruit getInstance(String className) throws Exception { Fruit f = null; f = (Fruit) Class.forName(className).newInstance(); //利用反射实现实例化Fruit的子类 return f; } } public class TestFactory { public static void main(String[] args) throws Exception { // TODO Auto-generated method stub Fruit f = Factory.getInstance("reflect.Orange"); f.eat(); } }<strong> </strong>3.总结:
基础的简单工厂类最大的问题就是新增子类后,修改代码的问题,但是有了反射机制的引入,实现了可以任意增加子类且不会增加代码的维护难度。
相关文章推荐
- 常用jar架包
- TextView显示系统时间(秒针变化)
- CentOS7安装Mono和MonoDevelop
- 82、文字混动效果
- PHP PDO ACCESS 留言板-php转换成HTML页面文件maketohtml.php
- 试玩小兵赚钱真的假的
- C#泛型浅谈(浅~)自定义类型数组的排序
- eclipse中svn的使用
- STAThread 初学习集合
- Qt实现图片渐进渐出效果
- 详解Android Activity之间切换传递数据的方法
- Javascript闭包
- 7、固定集合 (capped collection)
- iOS 保持界面流畅的技巧
- Alexandra and Prime Numbers(思维)
- 测试环境准备
- setuptools小节
- PHP PDO ACCESS 留言板-留言内容显示messageInfo.php
- AppStore App申请审核加速
- cannot import name 'Flask' 的错误