简单工厂加反射是OCP原则的很好体现。网上已经有很多的例子了,但是这种东西,只有自己想出一个例子,才算是自己的。

下面的代码中一个五个类。

TestSimpleFactory是用来测试的驱动。

IAnimal是一个接口,声明了一个动物类的行走go的方法。

Chicken实现了IAnimal接口,表示小鸡,Chicken实现go。只是简单输出Chicken Run。小鸡的走的方式是奔跑。

Duck也实现了IAnimal接口,表示小鸭,Duck实现go。只是简单输出Duck。小鸭的走的方式是游泳。

AnimalFactory是一个简单工厂,用来生产小鸡或小鸭。

TestSimpleFactory.java

public class TestSimpleFactory {

publicstaticvoidmain(String[] args) {  PropertyReader reader=newPropertyReader("factory.properties");  String type=reader.getProperty("factory");  IAnimal animal=AnimalFactory.createAnimal(type);  animal.go();  }  }

IAnimal.java

  1. public interface IAnimal {
  2. void go();
  3. }

Chicken.java

  1. public class Chicken implements IAnimal{
  2. public void go() {
  3. System.out.println("Chicken Run");
  4. }
  5. }

Duck.java

  1. public class Duck implements IAnimal {
  2. public void go() {
  3. System.out.println("Duck Swim");
  4. }
  5. }

AnimalFactory.java

  1. public class AnimalFactory {
  2. public static IAnimal createAnimal(String name)
  3. {
  4. try {
  5. Class c=Class.forName(name);
  6. return (IAnimal)c.newInstance();
  7. } catch (ClassNotFoundException e) {
  8. System.out.println("This class doesn't exsist!");
  9. e.printStackTrace();
  10. } catch (InstantiationException e) {
  11. System.out.println("This class can't be instantiated!");
  12. e.printStackTrace();
  13. } catch (IllegalAccessException e) {
  14. e.printStackTrace();
  15. }
  16. return null;
  17. }
  18. }

其中具体要创建的对象防止factory.properties中。

动物的子类实例化的时候用到了反射。

factory.properties中的内容为:

  1. factory=neu.swc.tzy.Car

属性文件读取方法见:http://snowteng17.blog.51cto.com/1532294/330459

转载于:https://blog.51cto.com/snowteng17/330453

设计模式之简单工厂模式加反射相关推荐

  1. C#设计模式(2)——简单工厂模式

    一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式--简单工厂模式. 二.简单工厂 ...

  2. 设计模式之简单工厂模式(Java 实现)

    设计模式之简单工厂模式(Java 实现) 本文首发于http://www.imooc.com/wiki/Designlesson/factory.html 简单工厂模式是平时开发过程中最常见的设计模式 ...

  3. php的类图怎么生成_PHP设计模式之简单工厂模式

    PHP设计模式之简单工厂模式 先从简单工厂入门,不管是面试还是被他人面试,在问到设计模式的时候,大多数人都会提到工厂模式.毫无疑问,工厂相关的几种模式在设计模式中是最出名的也是应用比较广泛的一种模式. ...

  4. 工厂模式 java场景_研磨设计模式之简单工厂模式(场景问题)

    简单工厂不是一个标准的设计模式,但是它实在是太常用了,简单而又神奇,所以还是需要好好掌握的,就当是对学习设计模式的热身运动吧.为了保持一致性,我们尽量按照学习其它模式的步骤来进行学习. 1  场景问题 ...

  5. .NET设计模式(1): 简单工厂模式

    .NET设计模式(1): 简单工厂模式 最近一直在看设计模式,想把自己的学习笔记与大家分享一下,如果能帮助大家的话,我会非常高兴,同时也欢迎大家指出里面的不足.园子里其实关于此类文章已经很多了,如果d ...

  6. JS常用的设计模式(2)——简单工厂模式

    JS常用的设计模式(2)--简单工厂模式 简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定 ...

  7. 设计模式之简单工厂模式(C#版)

    设计模式之简单工厂模式(C#版) 简介 假设有个女朋友 总结 简介 我用最简洁而直接的方式来描述一下,什么是简单工厂模式.一句话就是,工厂类使用switch case语句返回特定类型. 下面,我们用一 ...

  8. 大牧絮叨设计模式:简单工厂模式

    文章目录 1. 简单工厂模式概述 1.1.简单工厂模式核心组件 1.2.简单工厂模式优缺点 2.` Java`实现 公共父类定义 产品具体实现类 简单工厂定义 代码运行测试: 3. `Python`实 ...

  9. Net设计模式之简单工厂模式(Simple Factory Pattern)

    一.简单工厂模式简介(Bref Introduction)        简单工厂模式(Simple Factory Pattern)的优点是,工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实 ...

最新文章

  1. 负载测试值mpstat的使用技巧
  2. Find a way
  3. AG9 Service order创建好之后,要自动通过middleware传其他系统去 disable
  4. formlayout_精简SWT FormLayout的用法
  5. 按照时间,每天分区;按照数字,200000一个分区
  6. debug error怎么解决_我要以血和泪的经历告诉你,这个 bug 太难解决了
  7. 超图三维可以转换成HTML,iserver上发布的三维场景怎样调用到自己的html页面中?...
  8. mysql启动失败 linux_如何解决MySQL内存不足启动失败的问题
  9. python getattr用法_python自省函数getattr的用法
  10. css网页设计作业_运动中心网页设计作业成品
  11. 怎么用计算机录制mp3的音频,内录音频是什么_如何用电脑内录音频图文步骤
  12. C语言利用指针实现字符串逆序输出
  13. Flutter tween动画
  14. 云计算、大数据和人工智的区别和联系
  15. kws 命令词唤醒介绍
  16. 1200:分解因数(dfs)
  17. 【POJ 1788 --- Building a New Depot】
  18. html 边框终点 圆点,CSS设置虚线或虚边框dashed border
  19. PADS-电阻、电容、电感门封装
  20. 域名里gTLD、new gTLD、ccTLD的含义之间的关系

热门文章

  1. Sandy Bridge 12款双核心产品正式入列 Core i7-2620M Core i5-2540M
  2. 中文 CentOS 攻略
  3. Linux Shell脚本入门教程系列之(二)第一个shell脚本
  4. php clean html 可以设置过滤及保留属性
  5. Memcached 一致性哈希算法PHP实现
  6. LeetCode 374. Guess Number Higher or Lower
  7. SpringBoot——Quartz定时框架的使用详解和总结
  8. 计算机网络太难?如何系统自学计算机网络?
  9. Java缓存Ehcache-核心类和方法介绍及代码实例
  10. markdown UML图