工厂方法,简单粗暴得理解就是:有一些相似的工厂,他们有着同一个方法,并且生产同样类型的产品。再粗暴 一点就是:比如有2家工厂,都生产汽车,一家叫做宝马公司,一家叫做比亚迪股份,他们都有一个方法叫做“造车”。
如何实现这个场景呢?
超级无敌简单:分三步走:1、定义产品接口和产品 。 2、定义抽象的工厂类和具体工厂类。 3、调用。
1、定义产品接口和产品
public interface Car { //定义一个Car的接口,里边只有一个简单的run的方法
public void run();
}
class Bmw implements Car{ //定义宝马汽车,并且实现run方法
public void run() {
System.out.println("我是大宝马,跑起来非常拉风!!");
}
}
class Byd implements Car{ //定义比亚迪汽车,并且实现run方法
public void run() {
System.out.println("我是小比亚迪,跑起来一般般~~");
}
}
2、定义抽象的工厂类和具体的工厂类
abstract class CarFactory{ //定义一个抽象的工厂类,里边有一个抽象方法:造车
public abstract Car createCar();
}
class BmwFactory extends CarFactory{ //宝马的工厂,实现生产宝马的方法
public Car createCar() {
return new Bmw();
}
}
class BydFactory extends CarFactory{ //比亚迪的工厂,实现生产比亚迪的方法
public Car createCar() {
return new Byd();
}
}
3、调用来看看!!
public static void main(String[] args) {
CarFactory bydFactory=new BydFactory();
bydFactory.createCar().run();
CarFactory bmwFactory=new BmwFactory();
bmwFactory.createCar().run();
}
结果:
我是小比亚迪,跑起来一般般~~
我是大宝马,跑起来非常拉风!!
总结:
工厂方法的应用场景:比如上述例子。
工厂方法的好处:让程序变得更加容易扩展!
举个例子:要在上述例子加入一个丰田公司和丰田车,那怎么办?非常easy。直接看代码!
class Toyota implements Car{ //先定义车
public void run() {
System.out.println("我是丰田轿车,大家不要砸我");
}
}
class ToyotaFactory extends CarFactory{ //再定义工厂
public Car createCar() {
return new Toyota();
}
}
我的理解就是这样的,欢迎大家留言讨论