工厂模式属于创建型模式,它提供了一种创建对象的最佳方式。

它的特点是:客户端的程序类不直接牵扯到对象的实例化管理,只与接口发生关联,通过工厂类获取指定接口的实例化对象。

简单工厂模式如下:

  1. interface Car {
  2. public void Name();
  3. }
  4. class Audi implements Car {
  5. public void Name() {
  6. System.out.println("Audi");
  7. }
  8. }
  9. class Factory{
  10. private Factory() {}
  11. public static Car getInstance(String className) {
  12. if("Audi".equalsIgnoreCase(className)) {
  13. return new Audi();
  14. }
  15. return null;
  16. }
  17. }
  18. public class Test {
  19. public static void main(String[] args) throws Exception {
  20. Car audi = Factory.getInstance("Audi");
  21. audi.Name();
  22. }
  23. }

简单工厂模式

问题在于,可能会有很多的继承接口的子类,那么工厂类就要一直更新下去,很麻烦。这时候,就引入反射机制。

  1. package test;
  2. interface Car {
  3. public void Name();
  4. }
  5. class Audi implements Car {
  6. public void Name() {
  7. System.out.println("Audi");
  8. }
  9. }
  10. class Factory {
  11. private Factory() {}
  12. public static Car getInstance(String className) {
  13. Car instance = null;
  14. try {
  15. instance = (Car) Class.forName(className).getDeclaredConstructor().newInstance();
  16. } catch (Exception e) {
  17. e.printStackTrace();
  18. }
  19. return instance;
  20. }
  21. }
  22. public class Test {
  23. public static void main(String[] args) throws Exception {
  24. Car msg = Factory.getInstance("test.Audi");
  25. msg.Name();
  26. }
  27. }

工厂模式

关于反射
反射最大的作用之一就在于可以不在编译时知道某个对象的类型,而在运行时通过提供完整的”包名+类名.class”得到。注意:不是在编译时,而是在运行时。
功能:
•在运行时能判断任意一个对象所属的类。
•在运行时能构造任意一个类的对象。
•在运行时判断任意一个类所具有的成员变量和方法。
•在运行时调用任意一个对象的方法。
说大白话就是,利用Java反射机制我们可以加载一个运行时才得知名称的class,获悉其构造方法,并生成其对象实体,能对其fields设值并唤起其methods。
应用场景:
反射技术常用在各类通用框架开发中。因为为了保证框架的通用性,需要根据配置文件加载不同的对象或类,并调用不同的方法,这个时候就会用到反射——运行时动态加载需要加载的对象。
特点:
由于反射会额外消耗一定的系统资源,因此如果不需要动态地创建一个对象,那么就不需要用反射。另外,反射调用方法时可以忽略权限检查,因此可能会破坏封装性而导致安全问题。

最后,如果接口也特别多的话,工厂类里还是要写很多个方法,这个问题可以用泛型解决,这样的工厂模式叫抽象工厂模式

  1. package test;
  2. interface Car {
  3. public void Name();
  4. }
  5. class Audi implements Car {
  6. public void Name() {
  7. System.out.println("Audi");
  8. }
  9. }
  10. interface Phone{
  11. public void Name();
  12. }
  13. class iPhone implements Phone{
  14. public void Name() {
  15. System.out.println("iPhone");
  16. }
  17. }
  18. class Factory {
  19. private Factory() {}
  20.  
  21. @SuppressWarnings("unchecked")
  22. //instanceName 接口的子类 className接口的类型
  23. public static <T> T getInstance(String instanceName, Class<T> className ) {
  24. T instance = null;
  25. try {
  26. instance = (T) Class.forName(instanceName).getDeclaredConstructor().newInstance();
  27. } catch (Exception e) {
  28. e.printStackTrace();
  29. }
  30. return instance;
  31. }
  32. }
  33. public class Test {
  34. public static void main(String[] args) throws Exception {
  35. Car audi = Factory.getInstance("test.Audi", Car.class);
  36. audi.Name();
  37. iPhone iphonex = Factory.getInstance("test.iPhone", iPhone.class);
  38. iphonex.Name();
  39. }
  40. }

抽象工厂模式

面试题:什么是java反射机制?

反射机制是 Java 语言提供的一种基础功能,赋予程序在时自省(introspect,官方用语)的能力。通过反射我们可以直接操作类或者对象,比如获取某个

对象的类定义,获取类声明的属性和方法,调用方法或者构造对象,甚至可以运行时修改类定义。

Java反射机制与工厂模式的更多相关文章

  1. Java反射机制在工厂模式中的应用

    在本篇文章中就不详细介绍工厂模式,主要介绍一下反射在工厂模式中的使用,让读者对反射机制带来的好处有更深的认识. 首先看一下简单工厂模式 简单工厂模式(simple factory)是类的创建模式,又叫 ...

  2. Java反射机制demo(七)—反射机制与工厂模式

    Java反射机制demo(七)—反射机制与工厂模式 工厂模式 简介 工厂模式是最常用的实例化对象模式. 工厂模式的主要作用就是使用工厂方法代替new操作. 为什么要使用工厂模式?直接new不好吗? 直 ...

  3. 基于C#反射机制的工厂模式

    简单介绍 反射提供了描写叙述程序集.模块和类型的对象(Type 类型). 能够使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或訪问其字段和属性. 假设代码中使用了特 ...

  4. Java反射机制在代理模式中的使用

    代理模式的核心思路就是一个接口有两个子类,一个子类完成核心的业务操作,另一个子类完成与核心业务有关的辅助性操作. 代理模式分为静态代理模式和动态代理模式.  静态代理模式: //接口类 interfa ...

  5. Java反射机制及IoC原理

    一. 反射机制概念 主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义.在java中,只要给定类的名字, 那么就可以通 ...

  6. [转]Java反射机制详解

    目录 1反射机制是什么 2反射机制能做什么 3反射机制的相关API ·通过一个对象获得完整的包名和类名 ·实例化Class类对象 ·获取一个对象的父类与实现的接口 ·获取某个类中的全部构造函数 - 详 ...

  7. Java反射机制Reflection

    Java反射机制 1 .class文件 2 Class类 3 Class类与反射机制 4 Java反射机制的类库支持及简介 5 反射机制的定义与应用 6 反射机制Demo Java反射机制demo(一 ...

  8. Java反射机制的基本概念与使用

    本篇文章分为以下几个部分: 1.认识反射 2.反射的源头(Class类) 3.利用反射操作构造方法 4.利用反射调用类中的方法 5.反射中的invoke方法 6.利用反射调用类中的属性 反射在我们普通 ...

  9. Java反射机制(带应用)

    1.Java的反射机制:        Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态 ...

随机推荐

  1. shell编程——变量子串的常用操作

    ${#字符串} 返回字符串的长度 [root@localhost ~]# a=length [root@localhost ~]# echo ${#a} 6 ${字符串:位置x} 从位置x开始往后截取 ...

  2. 移动端web页面input限制只能输入数字

    <input type="number" pattern="[0-9]*" /> 如上所示,在安卓端设置input类型为number,可限制键盘只输 ...

  3. redis cluster test

    cp /test/tests/redis.conf /etc redis-server /etc/redis.conf redis-trib.rb create --replicas 1 172.17 ...

  4. Python_10-异常处理

    目录: 1.1 python标准异常1.2 简介1.3 try语句     1.3.1 使用try和except语句来捕获异常     1.3.2 该种异常处理语法的规则     1.3.3 使用tr ...

  5. 344. Reverse String 最基础的反转字符串

    [抄题]: [暴力解法]: 时间分析: 空间分析: [奇葩输出条件]: [奇葩corner case]: [思维问题]: 还停留在 i < len / 2的阶段,不行,应该是指针对撞问题了 [一 ...

  6. Openssl pkcs7命令

    一.简介 pkcs7命令用于处理DER或者PEM格式的pkcs#7文件.   二.语法 openssl pkcs7 [-inform PEM|DER] [-outform PEM|DER] [-in ...

  7. nginx相关教程

    1.nginx简易的教程 http://www.cnblogs.com/jingmoxukong/p/5945200.html#%E8%B7%A8%E5%9F%9F%E8%A7%A3%E5%86%B3 ...

  8. 洛谷 P3627 [APIO2009](抢掠计划 缩点+spfa)

    题目描述 Siruseri 城中的道路都是单向的.不同的道路由路口连接.按照法律的规定, 在每个路口都设立了一个 Siruseri 银行的 ATM 取款机.令人奇怪的是,Siruseri 的酒吧也都设 ...

  9. turntable

    1.业务流程 2.80001代码逻辑 3.80002代码逻辑 4抽奖概率计算

  10. 实践作业4---DAY2阶段一。

    由于CSDN博客没有班级博客栏目,所以在该项功能上无法与博客园进行对比,我们将就CSDN和博客园的博文发布功能进行对比.我们就CSDN和博客园的博文发布页面.后台管理界面.发布新博客及界面进行了全面的 ...