工厂设计模式 Factory
Factory 主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类。
例如:汽车销售商场
该模式将创建对象的过程放在了一个静态方法中来实现.在实际编程中,如果需要大量的创建对象,该模式是比较理想的.
public class Demo1 {
public static void main(String[] args) {
System.out.println("买宝马");
Car bmw = CarFactory("BMW");
bmw.run();
System.out.println("买大奔");
Car benz = CarFactory("Benz");
benz.run();
}
public static Car CarFactory(String carName) {
if ("BMW".equals(carName)) {
return new BMW();
} else if ("Benz".equals(carName)) {
return new Benz();
} else {
throw new RuntimeException("车型有误");
}
}
}
abstract class Car {
public abstract void run();
}
class BMW extends Car {
@Override
public void run() {
System.out.println("BMW跑跑");
}
}
class Benz extends Car {
@Override
public void run() {
System.out.println("Benz跑跑");
}
}
模拟spring工厂:
person类:
public class Person {
private int id;
String name;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
public Person() {
}
public void eat(int num) {
System.out.println(name + "吃很" + num + "斤饭");
}
private static void sleep(int num) {
System.out.println("明天睡上" + num + "小时");
}
public static void sum(int[] arr) {
System.out.println("长度是:" + arr.length);
}
@Override
public String toString() {
return " 编号:" + this.id + " 姓名:" + this.name;
}
}
info.txt
com.it.reflect.Person
id=
name=旺财
/*
工厂设计模式就是用于产生对象 的。
*/
class Car{}
class BMW extends Car{}
class BSJ extends Car{} public class Demo1 { public static void main(String[] args) throws Exception {
Person p = (Person) getInstance();
System.out.println(p);
} //需求: 编写一个工厂方法根据配置文件返回对应的对象。
public static Object getInstance() throws Exception{
//读取配置文件
BufferedReader bufferedReader = new BufferedReader(new FileReader("info.txt"));
//读取第一行 : 读取类文件的信息
String className = bufferedReader.readLine();
//通过完整类名获取对应 的Class对象
Class clazz = Class.forName(className);
//获取到对应的构造方法
Constructor constructor = clazz.getDeclaredConstructor(null);
constructor.setAccessible(true);
Object o = constructor.newInstance(null);
//给对象设置对应的属性值
String line = null;
while((line = bufferedReader.readLine())!=null){
String[] datas = line.split("=");
Field field =clazz.getDeclaredField(datas[0]);
//设置可以访问
field.setAccessible(true);
if(field.getType()==int.class){
field.set(o, Integer.parseInt(datas[1]));
}else{
field.set(o, datas[1]);
}
}
return o;
}
}
工厂设计模式 Factory的更多相关文章
- 设计模式(一)工厂模式Factory(创建型)
设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.可是在一些情况下, new操作符直接生成对象会带来一些问题. ...
- 设计模式(一)工厂模式Factory(创建类型)
设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.可是在一些情况下, new操作符直接生成对象会带来一些问题. ...
- Factory,工厂设计模式,C++描述
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- 设计模式(一)工厂模式Factory(创建型)(转)
原文链接:http://blog.csdn.net/hguisu/article/details/7505909 设计模式一 工厂模式Factory 在面向对象编程中, 最通常的方法是一个new操作符 ...
- 设计模式 - 工厂模式(factory pattern) 具体解释
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012515223/article/details/27081511 工厂模式(factory pa ...
- PHP高级特性-反射Reflection以及Factory工厂设计模式的结合使用[代码实例]
PHP高级特性-反射以及工厂设计模式的结合使用 [结合 Laravel-Admin 代码实例讲解] 利用反射来实现工厂模式的生产而无需创建特定的工厂类 本文地址http://janrs.com/?p= ...
- Java工厂设计模式
程序在接口和子类之间加入一个过渡类,通过此过渡类端取得接口的实例化对象,一般都会称这个过渡端为工厂类 //=============================================== ...
- 工厂模式(Factory Patter)
1.工厂模式简介 工厂模式属于创建型模式,是专门用来创建对象的模式,抽象了实例化的过程.工厂模式分为 : 工厂方法模式.抽象工厂模式. 在学习工厂方法模式.抽象工厂之前,首先先要了解一下简单工厂模式, ...
- dom4j解析器 基于dom4j的xpath技术 简单工厂设计模式 分层结构设计思想 SAX解析器 DOM编程
*1 dom4j解析器 1)CRUD的含义:CreateReadUpdateDelete增删查改 2)XML解析器有二类,分别是DOM和SAX(simple Api for xml). ...
随机推荐
- 详解Struts2拦截器机制
Struts2的核心在于它复杂的拦截器,几乎70%的工作都是由拦截器完成的.比如我们之前用于将上传的文件对应于action实例中的三个属性的fileUpload拦截器,还有用于将表单页面的http请求 ...
- 深入探索C++对象模型(六)
执行期语意学(Runtime Semantics) 对象的构造和析构(Object Constructor and Destructor) 一般而言,constructor和destructor的安插 ...
- 使用MySQLdb操作Mysql数据库
MySQLdb简介 MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQLAB公司.在2008年1月16号被Sun公司收购.目前MySQL被广泛地应用在Internet上的中小型网站中.由于 ...
- Unity与Android交互-Unity接入高德地图实现定位以及搜索周边的功能(使用Android Studio)详细操作
刚进公司给安排的任务就是Unity接入高德地图,算是踩了不少坑总算做出来了,抽点时间写个博客记录一下 废话不多说 先上效果图 获取定位并根据手机朝向显示周边信息 使用的Unity ...
- dedecms 动态tab写法
项目要求要dedecms动态添加选项卡然后自己写了一个 现在需要些tab的栏目下创建子栏目 (如果是首页需要顶级栏目) 如图我在案例下添加了3个子栏目 然后每个子栏目里面添加需要在tab里面输出的内容 ...
- TestNG+ExtentReports生成超漂亮的测试报告
一个优雅.漂亮的测试报告,能够给我们的测试工作带来不少的加分,而报告的模版实在是让我们这些技术人员头疼的问题,设计的实在是没有什么美感. 那么今天就给大家分享一个自动化测试中,一个超漂亮的测试报告模版 ...
- 使用dom4j讲xml字符串递归遍历成Map
package test; import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import j ...
- Oracle Job定时任务的使用详解
oracle中的job能为你做的就是在你规定的时间格式里执行存储过程,定时执行一个任务 .下面是一个小案例,定时每15分钟向一张表插入一条数据 一 1.创建一张测试表 -- Create table ...
- TCP札记
协议对于通信就像算法对于计算一样.算法允许人们在不必知道特定的CPU指令集的情况下指定或理解具体的计算形式.同样地,通信协议允许人们不依赖特定厂家的网络硬件来指定或理解数据通信. 网络协议通常分不同层 ...
- 通过java反射得到javabean的属性名称和值参考
通过java反射得到javabean的属性名称和值 Field fields[]=cHis.getClass().getDeclaredFields();//cHis 是实体类名称 String[] ...