设计模式之工厂方法模式
2017-06-04 22:12
295 查看
工厂方法模式属于创建设计模式之一,是一种比较简单的设计模式,应用比较广泛。工厂方法模式的定义:定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法模式适合用于复杂对象的创建过程,而通过new就可以实例化的对象不需要使用该模式。
首先新建一个“产品”抽象类
接下来新建“工厂”抽象类
创建具体“产品”类
Q3Car.class
Q7Car
实现具体工厂
实现工厂生产产品
输出结果
Q3启动
Q3开始行驶
Q7启动
Q7开始行驶
该模式实现比较简单,主要可以注意到面向抽象、面向接口编程,另外需要注意的一点是使用了反射机制获得类实例。该模式也存在缺点:当“产品”变多,我们的产品类会一直增加,造成类数量的臃肿,另外还要引入抽象层,这一点也是需要注意的。
首先新建一个“产品”抽象类
public abstract class AudiCar { /** * 汽车抽象产品类 * 定义汽车的一个行为方法,车可以启动开走 */ public abstract void drive(); /** * 定义汽车的一个行为方法 车可以自动巡航 */ public abstract void selfNavifation(); }
接下来新建“工厂”抽象类
public abstract class AudiFactory { /** * 抽象工厂定义抽象方法 * @param tClass * @param <T> * @return */ public abstract <T extends AudiCar> T createAudiCar(Class<T> tClass); }
创建具体“产品”类
Q3Car.class
public class Q3Car extends AudiCar { private static final String TAG = Q3Car.class.getName(); @Override public void drive() { System.out.println("Q3启动"); } @Override public void selfNavifation() { System.out.println("Q3开始行驶"); } }
Q7Car
public class Q7Car extends AudiCar { private static final String TAG = Q7Car.class.getName(); @Override public void drive() { System.out.println("Q7启动"); } @Override public void selfNavifation() { System.out.println("Q7开始行驶"); } }
实现具体工厂
/** * 具体工厂,实现抽象方法 */ public class AudiCarFactory extends AudiFactory { @Override public <T extends AudiCar> T createAudiCar(Class<T> tClass) { AudiCar audiCar = null; try { //通过反射得到 audiCar = (AudiCar) Class.forName(tClass.getName()).newInstance(); } catch (Exception e) { e.printStackTrace(); } return (T) audiCar; } }
实现工厂生产产品
public class MainClass { public static void main(String[] args) { //实例化一个具体工厂 AudiFactory audiFactory = new AudiCarFactory(); //生产Q3汽车 Q3Car q3Car = audiFactory.createAudiCar(Q3Car.class); q3Car.drive(); q3Car.selfNavifation(); //生产Q7汽车 Q7Car q7Car = audiFactory.createAudiCar(Q7Car.class); q7Car.drive(); q7Car.selfNavifation(); } }
输出结果
Q3启动
Q3开始行驶
Q7启动
Q7开始行驶
该模式实现比较简单,主要可以注意到面向抽象、面向接口编程,另外需要注意的一点是使用了反射机制获得类实例。该模式也存在缺点:当“产品”变多,我们的产品类会一直增加,造成类数量的臃肿,另外还要引入抽象层,这一点也是需要注意的。
相关文章推荐
- PHP设计模式——工厂方法
- 设计模式:简单工厂和工厂方法
- Java设计模式之二 —— 工厂方法
- JAVA设计模式学习之----创建模式:工厂模式(工厂方法)
- 设计模式之工厂方法模式
- 设计模式_2_简单工厂、工厂方法、抽象工厂比较
- C# 设计模式-工厂方法(Factory Method)
- 设计模式之(工厂方法)
- 设计模式-工厂方法(Factory Method)
- 研磨设计模式之工厂方法模式-1
- 设计模式系列一创建型模式之(简单工厂VS工厂方法)
- [设计模式] 简单工厂/工厂方法/抽象工厂
- C++设计模式之工厂方法(二)
- 设计模式-创建型02-工厂方法
- 23种设计模式之工厂方法
- iOS设计模式-工厂方法
- 设计模式:简单工厂、工厂方法、抽象工厂之小结与区别
- [设计模式-创建型]工厂方法(Factory Method)
- PHP设计模式之工厂方法设计模式实例分析
- Java设计模式之工厂方法模式——学习笔记