(转)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 ...
随机推荐
- javacpp-opencv图像处理系列:国内车辆牌照检测识别系统(万份测试车牌识别准确率99.7%以上,单次平均耗时39ms)
javaCV图像处理系列: 一.javaCV图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体.位置.大小.粗度.翻转.平滑等操作 二.javaCV图像处理之2:实时视频添 ...
- 每天一个JS 小demo之新建文件夹。主要知识点:DOM方法的综合运用
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"& ...
- 关于安卓百度地图SDK报错:Multiple dex files define Lcom/baidu/android/bbalbs/common/a/a;
1.找到.jar包 2.右键,用WinRAR打开 3.打开com/baidu/ 4.保留location,其他全删掉 5.这样将不会报错,可以运行了!!!
- iframe访问子页面方法
在Iframe中调用子页面的Js函数 调用IFRAME子页面的JS函数 说明:假设有2个页面,index.html和inner.html.其中index.html中有一个iframe,这个iframe ...
- android网页分享到朋友圈问题求助?
目前想要实现通过QQ将网页分享到微信好友或朋友圈,看见有些APP是直接分享出去左下角图标显示的是QQ.求助各位大牛提供下思路. 这种功能是怎么实现的.应该不是通过android的系统分享实现的吧?.查 ...
- SCI论文写作中的注意事项
SCI论文一般都是英文的格式,其中有很多原则和细节需要我们注意,在我完成第一篇SCI论文的过程中,做些记录,同时和大家分享一下这些经验.同时也稍微改变一下园子里的人口比例,都是攻城狮,程序猿什么的也过 ...
- github用法小结
共享仓库 bare 裸仓库 生成裸仓库时必须以.git结尾. 仓库就相当于一个服务器 ### 创建远程仓库 1. 创建以.git结尾的目录mkdir repo.git 2 ...
- MySQL错误2003:Can't connect to MySQL server (10060)
1.网络不通. 检查能不能ping通. 2.防火墙设置. 防火墙是否放过mysql的进程,是否屏蔽了mysql的3306端口. 3.mysql的账户设置. mysql账户是否不允许远程连接.如果无法连 ...
- jQuery星级评分插件
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta http-equiv="Con ...
- 【Android Developers Training】 39. 获取文件信息
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...