工厂模式及使用反射实现工厂模式
来源:互联网 发布:icc 文件 mac 编辑:程序博客网 时间:2024/05/17 23:42
一、工厂模式
1,概念
工厂模式(Factory Pattern)即在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。工厂模式是Java中最常用的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建爱你对象的最佳方式。
2,目的
定义一个创建对象的接口,让其自雷自己决定实例化那一个工厂类,工厂模式使其创建过程延迟到自雷进行。
3,优缺点
优点:一个调用者想创建一个对象,只要知道其名称就可以了。扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以了。屏蔽产品的具体实现,调用者只关心产品的接口。
缺点:每增加一个产品,都需要增加一个具体类和对象实现工厂,似的系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同事也增加了系统具体类的依赖。
4,使用场景:日志记录,数据库访问,通用协议等。
二、实现步骤及反射优化
步骤1:创建一个接口
public interface Animal {
public void eat();
}
步骤二:创建实现接口的实体类。
public class Peoples implements Animal {
@Override
public void eat() {
System.out.println("People eat with chopsticks");
}
}
public class Panda implements Animal {
@Override
public void eat() {
System.out.println("Pandas eat bamboo");
}
}
步骤3:创建一个工厂,生成基于给定信息的实体类的对象。
原始类
public class AnimalFactor {
public Animal getAnimal(String animalType) {
if(animalType == null) {
return null;
}
if("PEOPLES".equals(animalType)) {
return new Peoples();
} else if("Panda".equals(animalType)) {
return new Panda();
}
}
}
反射优化
public class AnimalFactor {
public static Object getClass(Class<?extends Animal> clazz) {
Object obj = null;
try {
obj = Class.forName(clazz.getName()).newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return obj;
}
}
步骤4:使用该工厂,通过传递类型信息来获取实体类的对象。
public class FactorDemo {
public static void main(String[] args) {
AnimalFactory animalFactory = new AnimalFactory();
Animal animal1 = animalFactory.getAnimal("PEOPLES");
animal1.eat();
Animal animal2 = animalFactory.getAnimal("PANDA");
animal2.eat();
}
}
反射实现
Peoples peoples = (Peoples) AnimalFactory.getClass(Peoples.class);
peoples .eat();
阅读全文
0 0
- 工厂模式及使用反射实现工厂模式
- 利用反射实现工厂模式.
- java反射实现工厂模式
- 反射实现简单工厂模式
- Java反射机制-使用反射实现工厂模式
- 工厂模式原理及实现
- java反射机制及简单工厂模式
- 反射工厂模式
- 工厂模式 + 反射改进
- 工厂模式与反射
- 抽象工厂模式+反射
- 反射工厂模式
- 工厂模式中的反射
- 简单工厂模式+反射
- 反射--工厂设计模式
- C++模拟反射实现工厂模式
- 简单的用反射实现工厂模式
- 利用反射机制实现工厂模式
- mysql的utf8编码配置
- bootstrap-fileinput组件上传
- linux上的一个玩具
- Android存储-SharedPreferences
- Java覆盖equals方法
- 工厂模式及使用反射实现工厂模式
- 【云星数据---大数据集群部署系列007】:Zeppelin0.7.3多环境部署方案
- javaWeb-servlet
- 利用数据库的存储过程生成java的formbean对象
- 通过银行卡号查询银行卡类型接口
- 配置Redis3.2
- SVN 常用操作命令 使用笔记
- Android中使用file.createNewFile()无法创建文件的问题(例如保存拍照的图片到本地)
- 22.Nginx模块