首页 > 其他分享 >工厂设计模式

工厂设计模式

时间:2022-12-28 11:32:00浏览次数:38  
标签:String 配置文件 void 工厂 println 设计模式 public name


工厂设计模式


作用:就是用于生产对象的。

一、在Java项目中


工厂设计模式_System

package com.cn.factory;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
/**
* Author:Liu Zhiyong(QQ:1012421396)
* Version:Version_1
* Date:2016年8月27日15:42:07
* Desc:
工厂设计模式:就是用于生产对象的。
*/
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(new File("./src/com/cn/factory/info.txt")));
//读取第一行:读取类文件的信息
String className = bufferedReader.readLine();
//通过完整类名获取对应的Class对象
Class clazz = Class.forName(className);
//获取对应的构造方法
Constructor constructor = clazz.getDeclaredConstructor(null);
constructor.setAccessible(true);//设置访问权限可以访问
//创建对象
Object obj = 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(obj, Integer.parseInt(datas[1]));
}else{
field.set(obj, datas[1]);
}
}

return obj;
}
}

package com.cn.reflect;
public class Person {
private int id;
String name;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
private Person() {
}

public void eat(){
System.out.println(name + "高高兴兴吃饭。。。");
}

public void eat(int num){
System.out.println(name + "高高兴兴吃了" + num + "大碗饭。。。");
}

private void sleep(){
System.out.println(name + "偷偷睡觉。。。");
}

private static void work(){
System.out.println("努力工作。。。");
}

public void sum(int[] arr){
System.out.println("长度是" + arr.length);
}

@Override
public String toString() {
return "编号" + this.id + "\t姓名:" + this.name;
}
}

info.txt文本文件

com.cn.factory.Person
id=110
name=木丁西


二、在web项目中



步骤:



    ①在src下添加配置资源包,例如 instance.properties




工厂设计模式_设计模式_02



工厂设计模式_配置文件_03

注意:配置文件中类名字符串前面可以有空格,后面不能有,否则会异常找不到类。


    ②写工厂类

package com.cn.factory;
import java.util.ResourceBundle;
/**
* 工厂,创建dao或service实例
* @author liuzhiyong
*
*/
public class BeanFactory {

//加载配置文件
private static ResourceBundle bundle;
static{
bundle = ResourceBundle.getBundle("instance");//加载服务器下/hotel/WEB-INF/classes/instance.properties
}

/**
* 根据指定的key,读取配置文件,获取类的全路径,创建对象
* @param <T>
* @param key 配置文件中的key,例如:dao=com.cn.Dao
* @return
*/
public static <T> T getInstance(String key, Class<T> clazz){
String className = bundle.getString(key);
try {
return (T) Class.forName(className).newInstance();//反射,创建对象
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}

③web项目中不固定写死的地方,需要创建对象时使用


工厂设计模式_System_04

 



标签:String,配置文件,void,工厂,println,设计模式,public,name
From: https://blog.51cto.com/u_15769923/5974015

相关文章

  • 企业工厂都是这样批量安装系统,WDS 批量装机教程
    原理依旧是PXE,运用到微软提供的WDS部署服务,相较于上次,此方法可以直接为客户机安装镜像而不是还原系统,对于配置不同的客户机同样适用,不管UEFI还是Legacy引导都无所谓......
  • 设计模式之“状态模式(State)”(未完整)
    一、状态模式(State)状态模式是当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 二、状态模式的作用状态模式主要解决的是当控制一个对象状态转......
  • 实践GoF的23种设计模式:命令模式
    摘要:命令模式可将请求转换为一个包含与请求相关的所有信息的对象,它能将请求参数化、延迟执行、实现Undo/Redo操作等。本文分享自华为云社区《【Go实现】实践GoF的23......
  • 23种设计模式 之 快速记忆
    导读本文仅仅是设计模式知识点汇总,适用于备考、想要装b的情况,不适用想要详细钻研学习的情况。1、什么叫做设计模式设计模式是解决方案!设计模式是解决反复出现问题......
  • 为什么说每个程序员都要尽早掌握设计模式相关知识?
    分享下前Google工程师「王争」对于这个话题的思考。 大家好,我是王争。 我相信,很多程序员都已经意识到基础知识的重要性,觉得要夯实基础,才能走得更远,但同时对于如何将基础......
  • 行为型:设计模式之状态模式(十八)
    “人有悲欢离合,月有阴晴圆缺”,包括人在内,很多事物都具有多种状态,而且在不同状态下会具有不同的行为,这些状态在特定条件下还将发生相互转换。就像水,它可以凝固成冰,也可以受热......
  • 行为型:设计模式之中介者模式(十四)
    腾讯公司推出的QQ作为一款免费的即时聊天软件深受广大用户的喜爱,它已经成为很多人学习、工作和生活的一部分(不要告诉我你没有QQ哦,)。在QQ聊天中,一般有两种聊天方式:第一种是用......
  • 创建型:设计模式之单例模式(三)
    3.1单例模式的动机对于一个软件系统的某些类而言,我们无须创建多个实例。举个大家都熟知的例子——Windows任务管理器,如图3-1所示,我们可以做一个这样的尝试,在Windows的“任......
  • UML设计模式符号答疑
    在UML类图中,常见的有以下几种关系:泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency) 1.泛化(Generalization)......
  • 【猿如意】中的『格式工厂』工具详情介绍
    目录​​一、什么是猿如意​​​​二、格式工厂简介​​​​三、通过猿如意获取格式工厂​​​​四、格式工厂使用技巧​​​​4.1基础设置​​​​4.2使用示例​......