您的位置:首页 > 其它

设计模式之工厂方法模式

2017-06-04 22:12 295 查看
工厂方法模式属于创建设计模式之一,是一种比较简单的设计模式,应用比较广泛。工厂方法模式的定义:定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法模式适合用于复杂对象的创建过程,而通过new就可以实例化的对象不需要使用该模式。

首先新建一个“产品”抽象类

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开始行驶

该模式实现比较简单,主要可以注意到面向抽象、面向接口编程,另外需要注意的一点是使用了反射机制获得类实例。该模式也存在缺点:当“产品”变多,我们的产品类会一直增加,造成类数量的臃肿,另外还要引入抽象层,这一点也是需要注意的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式