(转)java反射机制及简单工厂模式
第一步,定义一个接口类
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 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反射机制及简单工厂模式的更多相关文章
- 利用Java反射机制优化简单工厂设计模式
之前项目有个需求,审批流程的时候要根据配置发送信息:发送短信.发送邮件.当时看到这个就想到要用工厂模式,为什么要用工厂模式呢?用工厂模式进行大型项目的开发,可以很好的进行项目并行开发.就是一个程序员和 ...
- java反射机制的简单介绍
参考博客: https://blog.csdn.net/mlc1218559742/article/details/52754310 先给出反射机制中常用的几个方法: Class.forName (& ...
- Java实验项目三——简单工厂模式
Program: 请采用采用简单工厂设计模式,为某个汽车销售店设计汽车销售系统,接口car至少有方法print(), 三个汽车类:宝马.奥迪.大众 (属性:品牌,价格),在测试类中根据客户要求购买的汽 ...
- Java设计模式2:简单工厂模式
简单工厂模式 简单工厂模式是类的创建模式,又叫做静态工厂方法模式.简单工厂模式由一个工厂对象决定生产出哪一种产品类的实例. 为什么要使用简单工厂模式 原因很简单:解耦. A对象如果要调用B对象,最简单 ...
- Java设计模式学习记录-简单工厂模式、工厂方法模式
前言 之前介绍了设计模式的原则和分类等概述.今天开启设计模式的学习,首先要介绍的就是工厂模式,在介绍工厂模式前会先介绍一下简单工厂模式,这样由浅入深来介绍. 简单工厂模式 做法:创建一个工厂(方法或类 ...
- JAVA基础——设计模式之简单工厂模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂 ...
- java设计模式-----1、简单工厂模式
简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例,简单来说 ...
- java反射机制的简单使用
java 反射机制 反射机制简介 参考地址 什么是反射机制 反射机制指程序在运行时能够获取自身的信息.在java中只要给定类的名字,就可以通过反射机制获得类的所有信息 反射机制的优缺点 首先了解一下动 ...
- Java反射机制的简单学习
今天看了一下Java的反射机制,就此记录一下. 首先,我们要先了解一下什么是反射? 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力. JAV ...
随机推荐
- 包装FTPWebRequest类
上篇文章讨论了C#从基于FTPS的FTP server下载数据 (FtpWebRequest 的使用)SSL 加密.不过细心的朋友应该可以发现FTPWebRequest 每次都是新生成一个reques ...
- 常见浏览器的宽高代码写法!有原生JavaScript和jquery两种写法-------------------------------以及我的个人网站
我的个人网站 点击链接!欢迎大家访问 下面是网页一些常见的宽高的获取.........这是原生的写法(JavaScript) 网页可见区域宽: document.body.clientWidth 网页 ...
- [1] [转]软件架构之三层架构和MVC的关系
注:本文章内所有内容都来自互联网,本人主要是起了一个收集的作用 又看到有人在问三层架构和MVC的关系,感觉这种问题有点教条化了.因为它们都在逻辑上将应用程序划为三块,凑了一个数字3,就有人非要把它们联 ...
- Cordova各个插件使用介绍系列(二)—$cordovaBarcodeScanner扫描二维码与生成二维码
详情链接地址:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/cordova-2-cordovabarcodescanner/ 这是 ...
- WPF: 实现 ScrollViewer 滚动到指定控件处
在前端 UI 开发中,有时,我们会遇到这样的需求:在一个 ScrollViewer 中有很多内容,而我们需要实现在执行某个操作后能够定位到其中指定的控件处:这很像在 HTML 页面中点击一个链接后定位 ...
- .NET使用HttpWebRequest发送手机验证码
namespace SendSMS { class Program { static void Main(string[] args) { string phone = "13770504x ...
- 这是您一直期待的所有iOS 11功能的屏幕截图
Tips 原文作者:Chris Mills 原文地址:Here's all the iOS 11 screenshots you've been waiting for 除非你已经深陷VR其中,否则现 ...
- hibernate,createCriteria in条件 是一个集合。list 或 数组等
hibernate,createCriteria in条件 是一个集合.list 或 数组等 cq.in("states", new String[]{"2", ...
- 增广拉格朗日乘子法(Augmented Lagrange Method)
转载自:增广拉格朗日乘子法(Augmented Lagrange Method) 增广拉格朗日乘子法的作用是用来解决等式约束下的优化问题, 假定需要求解的问题如下: minimize f(X) s.t ...
- AppDelegate减负之常用三方封装 - 友盟推送篇
之前分享过集成友盟推送的方法, 需要的朋友可以查看一下链接: http://www.cnblogs.com/zhouxihi/p/6533058.html 一般开发中我们比较多使用的三方有友盟推送, ...