所谓工厂模式,简单来说就是java 提供的一种批量创建对象的方式
就我所了解掌握的工厂模式有两种,一种是比较简单的:
首先创建一个抽象类(接口也可以),在其中定义一个抽象方法,然后,创建三个改抽象类的子类,分别继承(或者实现)该抽象类,,,之后创建一个抽象类工厂,在里头创建一个getNewInstance(int num)的方法,用if/else或者switch/case来根据参数num确定要new的是哪一个对象。最后再创建一个包含main方法的类,调用工厂类的getNewInstance(int num)方法,获取需要的new的对象,就可以分别调用子类中的方法了。具体代码如下:
抽象类:
public abstract class Toy {
private String name;
private double price;
public Toy(String name, double price) {
super();
this.name = name;
this.price = price;
}
public Toy() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public abstract void play();
}
三个实现类(之一,其他类似,方法体不同输出做测试)
public class Car extends Toy {
public Car() {
super();
// TODO Auto-generated constructor stub
}
public Car(String name, double price) {
super(name, price);
// TODO Auto-generated constructor stub
}
@Override
public void play() {
// TODO Auto-generated method stub
System.out.println("this is Car");
}
}
工厂类
public class ToyFactory {
public static Toy getNewInstance(int num){
switch (num) {
case 1:
return new Tank();
case 2:
return new Car();
case 3:
return new Plane();
default:
return null;
}
}
}
main方法内使用:
public class TheMainClass {
public static void main(String[] args) {
Toy t =ToyFactory.getNewInstance(1);
if(t instanceof Tank){
Tank tk = (Tank)t;
tk.play();
tk.shoot();
}
t =ToyFactory.getNewInstance(3);
if (t instanceof Plane) {
Plane p = (Plane) t;
p.fly();
p.play();
}
t.play();
}
}
这种方法最直观的感受就是,简单,直接,偏静态,要什么写什么,缺点也是显而易见的,扩展性差,当我需要添加一个类时,我需要同时创建一个类并且修改工厂类中的方法
第二种方法就很不错了:(推荐)
我直接创建一个工厂类,工厂类中添加一系列的方法,当我需要使用哪个对象,就调用哪个方法,使用方便,
工厂类中:
public class ToyFactory {
public static Toy playCar() {
return new Car();
}
public static Toy playTank() {
return new Tank();
}
public static Toy playPlan() {
return new Plan();
}
}
main方法中:
Toy t1 = ToyFactory .playCar();
t1.desc();
Toy t2= ToyFactory .playTank();
t2.desc();