工厂方法模式
来源:互联网 发布:异界大巫txt吾知 编辑:程序博客网 时间:2024/06/03 22:07
一句话定义:
定义一个用于创建对象的接口,让其子类决定实例化哪个工厂类,将创建延迟到子类进行。
使用场景:
1. 复杂的对象的创建2. 明确知道不同条件创建不同的对象
实现要点:
1. 子类实现工厂接口,返回的也是一个抽象的产品2. 创建过程在子类执行
情景假设:
工厂模式的常见例子。汽车工程,能够生产奥迪和宝马两种汽车。
实现步骤:
1. 创建汽车抽象类
/* * 汽车工厂 汽车抽象类 */public abstract class Car { public abstract String name();}
2. 创建包装实体类
public class BaomaCar extends Car { @Override public String name() { return "宝马 82"; }}
public class AodiCar extends Car { @Override public String name() { return "奥迪 23"; }}
3. 创建汽车工厂
public class CarFactory { /** * 创建方法 * @param <T> 汽车泛型 */ public <T extends Car> T createCar(Class<T> clz){ T car = null; try { car = (T) Class.forName(clz.getName()).newInstance(); } catch (Exception e) { e.printStackTrace(); } return car; }}
4. 使用工厂进行创建
// 使用工厂进行创建 AodiCar car = new CarFactory().createCar(AodiCar.class); BaomaCar car1 = new CarFactory().createCar(BaomaCar.class); Log.i("info", "onCreate: ==++" + car.name()); Log.i("info", "onCreate: ==++" + car1.name());
补充内容:反射
上面创建Car实体的时候用到了反射,也可以用常规方式分别创建接口进行创建。如下:
/** * 创建奥迪汽车接口 */ public AodiCar createAodiCar(){ return new AodiCar(); }
反射机制的实现原理不做分析,简单用法:1. 反射可以获得所有类的方法、属性2. 通过 实例.getClass() 获得Class对象3. 通过Class.forName("name") 获得Class对象4. Class中getName() 获得类名字符串5. Class中newInstance()调用类的默认构造方法创建实例
0 0
- 工厂模式 -- 工厂方法
- 工厂模式-工厂方法
- 工厂模式-工厂方法
- 工厂 > 工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式---工厂方法模式
- 【模式】工厂方法模式
- 工厂方法,抽象工厂模式
- C#工厂模式-工厂方法
- 工厂模式 和工厂方法
- 工厂模式-C-工厂方法
- 工厂模式以及工厂方法
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂、工厂方法、抽象工厂模式
- 工厂模式(简单工厂、工厂方法)
- 简单工厂|工厂方法|抽象工厂模式
- 设计模式-工厂模式(简单工厂模式+工厂方法模式)
- 连接管理的评分机制介绍
- Android TextView Html加载图片Glide
- 【mysql】mysql case when实现不同条件查询
- 网络连接评分机制之NetworkFactory
- "关于图像分割Snake算法(c#)的一些不解之惑,望大神指点"的拙见
- 工厂方法模式
- Andriod Spinner下拉框使用详解
- [Leetcode] Contains Duplicate II
- mysql dml阻塞online ddl
- 网络连接评分机制之NetworkAgent
- 【hql】A different object with the same identifier value was already associated with the session
- CSS中block、inline和inline-block
- 期末总结
- 网络连接评分机制之NetworkMonitor