第一步,定义一个接口类

package factory.face;  

/**
* 接口,为了保证返回的对象可以统一用 Product接受
* @author Administrator
*/ public interface Product { void show(); }

第二步,写两个继承了以上接口的类

package factory.extend;

import factory.face.Product;

public class ProductA implements Product{
@Override
public void show() {
System.out.println("This is Product A!");
}
}
package factory.extend;

import factory.face.Product;

public class ProductB  implements Product{

	@Override
public void show() {
System.out.println("This is Product B!");
}
}

第三步,工厂类中应用反射机制

package factory.main;  

import factory.face.Product;  

/**
* 工厂类,在生产具体产品的时候,客户端只需要调用Factory 中的静态方法就可
* @author Administrator
*
*/ public class Factory { public static Product getProduct(String className) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
return (Product)Class.forName(className).newInstance();
} public static void main(String[] srgs) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
// System.out.println("WWWW");
// Class<?> classA = Class.forName("factory.extend.ProductA");
// Product aProduct = (Product)classA.newInstance();
// aProduct.show(); Product a= Factory.getProduct("factory.extend.ProductA");
a.show();
Product b=Factory.getProduct("factory.extend.ProductB");
b.show();
}
}

运行结果:

This is Product A!
This is Product B!
以下方式,是未使用反射机制的简单工厂类,根据判断逻辑来创建具体产品

public class Factory{

	public static Product getProduct(int product_index){

		if(product_index==0)
return new ProductA(); if(1==product_index)
return new ProductB(); return null;
}
}

简单工厂模式的优缺点:

优点:模式的核心是工厂类。这个类含有必要的判断逻辑,可以决定创建哪一个产品类的实例。而客户端免去了直接创建产品对象的责任,而仅仅负责“消费”产品。简单工厂模式通过这种做法实现了对责任的分割。

缺点:当产品类有复杂的多层次等级结构时,工厂类只有他自己。由于工厂类集中了所有产品创建逻辑的,如果不能正常工作的话会对系统造成很大的影响。如果使用常规的判断方法,在工厂里根据传入的参数的不同而实例化产品对象的话,代码是不可用的,因为如果增加新产品必须修改工厂角色的源码,不利于以后的维护。

(转)java反射机制及简单工厂模式的更多相关文章

  1. 利用Java反射机制优化简单工厂设计模式

    之前项目有个需求,审批流程的时候要根据配置发送信息:发送短信.发送邮件.当时看到这个就想到要用工厂模式,为什么要用工厂模式呢?用工厂模式进行大型项目的开发,可以很好的进行项目并行开发.就是一个程序员和 ...

  2. java反射机制的简单介绍

    参考博客: https://blog.csdn.net/mlc1218559742/article/details/52754310 先给出反射机制中常用的几个方法: Class.forName (& ...

  3. Java实验项目三——简单工厂模式

    Program: 请采用采用简单工厂设计模式,为某个汽车销售店设计汽车销售系统,接口car至少有方法print(), 三个汽车类:宝马.奥迪.大众 (属性:品牌,价格),在测试类中根据客户要求购买的汽 ...

  4. Java设计模式2:简单工厂模式

    简单工厂模式 简单工厂模式是类的创建模式,又叫做静态工厂方法模式.简单工厂模式由一个工厂对象决定生产出哪一种产品类的实例. 为什么要使用简单工厂模式 原因很简单:解耦. A对象如果要调用B对象,最简单 ...

  5. Java设计模式学习记录-简单工厂模式、工厂方法模式

    前言 之前介绍了设计模式的原则和分类等概述.今天开启设计模式的学习,首先要介绍的就是工厂模式,在介绍工厂模式前会先介绍一下简单工厂模式,这样由浅入深来介绍. 简单工厂模式 做法:创建一个工厂(方法或类 ...

  6. JAVA基础——设计模式之简单工厂模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂 ...

  7. java设计模式-----1、简单工厂模式

    简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例,简单来说 ...

  8. java反射机制的简单使用

    java 反射机制 反射机制简介 参考地址 什么是反射机制 反射机制指程序在运行时能够获取自身的信息.在java中只要给定类的名字,就可以通过反射机制获得类的所有信息 反射机制的优缺点 首先了解一下动 ...

  9. Java反射机制的简单学习

    今天看了一下Java的反射机制,就此记录一下. 首先,我们要先了解一下什么是反射? 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力. JAV ...

随机推荐

  1. 包装FTPWebRequest类

    上篇文章讨论了C#从基于FTPS的FTP server下载数据 (FtpWebRequest 的使用)SSL 加密.不过细心的朋友应该可以发现FTPWebRequest 每次都是新生成一个reques ...

  2. 常见浏览器的宽高代码写法!有原生JavaScript和jquery两种写法-------------------------------以及我的个人网站

    我的个人网站 点击链接!欢迎大家访问 下面是网页一些常见的宽高的获取.........这是原生的写法(JavaScript) 网页可见区域宽: document.body.clientWidth 网页 ...

  3. [1] [转]软件架构之三层架构和MVC的关系

    注:本文章内所有内容都来自互联网,本人主要是起了一个收集的作用 又看到有人在问三层架构和MVC的关系,感觉这种问题有点教条化了.因为它们都在逻辑上将应用程序划为三块,凑了一个数字3,就有人非要把它们联 ...

  4. Cordova各个插件使用介绍系列(二)—$cordovaBarcodeScanner扫描二维码与生成二维码

    详情链接地址:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/cordova-2-cordovabarcodescanner/ 这是 ...

  5. WPF: 实现 ScrollViewer 滚动到指定控件处

    在前端 UI 开发中,有时,我们会遇到这样的需求:在一个 ScrollViewer 中有很多内容,而我们需要实现在执行某个操作后能够定位到其中指定的控件处:这很像在 HTML 页面中点击一个链接后定位 ...

  6. .NET使用HttpWebRequest发送手机验证码

    namespace SendSMS { class Program { static void Main(string[] args) { string phone = "13770504x ...

  7. 这是您一直期待的所有iOS 11功能的屏幕截图

    Tips 原文作者:Chris Mills 原文地址:Here's all the iOS 11 screenshots you've been waiting for 除非你已经深陷VR其中,否则现 ...

  8. hibernate,createCriteria in条件 是一个集合。list 或 数组等

    hibernate,createCriteria in条件 是一个集合.list 或 数组等 cq.in("states", new String[]{"2", ...

  9. 增广拉格朗日乘子法(Augmented Lagrange Method)

    转载自:增广拉格朗日乘子法(Augmented Lagrange Method) 增广拉格朗日乘子法的作用是用来解决等式约束下的优化问题, 假定需要求解的问题如下: minimize f(X) s.t ...

  10. AppDelegate减负之常用三方封装 - 友盟推送篇

    之前分享过集成友盟推送的方法, 需要的朋友可以查看一下链接: http://www.cnblogs.com/zhouxihi/p/6533058.html 一般开发中我们比较多使用的三方有友盟推送, ...