工厂方法模式
之前的那个简单工厂 只有一个工厂啊 如果类型很多不利于扩展 因为类型多 责任重大啊
工厂方法模式,相当于 根据产品做了分类 比如 比亚迪 里面有很多 比亚迪系列的
这样有了个分类,大家看看代码,自己手动敲一敲:
需要什么汽车就要去对应的厂家(后者说是4S店)
工厂方法模式
什么是工厂方法模式
工厂方法模式Factory Method,又称多态性工厂模式。在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做。该核心类成为一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
这种比简单工厂模式的扩展性提升了很大呀;
看下结构:
定义产品接口:
package FactoryModel;
//汽车厂
public interface Car {
void run();
}
实现产品的类:
package FactoryModel;
public class BydCar implements Car {
@Override
public void run() {
System.out.println("比亚迪F3run");
}
}
package FactoryModel;
public class BydCarE implements Car{
@Override
public void run() {
System.out.println("比亚迪E6run");
}
}
package FactoryModel;
public class JiLiCar implements Car {
@Override
public void run() {
System.out.println("吉利帝豪run");
}
}
定义工厂接口:
package FactoryModel;
//汽车厂
public interface CarFactory {
Car CreateCar(String name);
}
工厂接口的实现类(细分了):
1、比亚迪工厂(或者4S店)
package FactoryModel;
public class BydFactory implements CarFactory {
@Override
public Car CreateCar(String name) {
if (name.equals("比亚迪F3")){ //里面有很多型号的
return new BydCar();
}
if (name.equals("比亚迪E6")) {
return new BydCarE();
}
return new BydCar();
}
}
2、吉利工厂(或者4s店)
package FactoryModel;
public class JiLiFactory implements CarFactory {
@Override
public Car CreateCar(String name) {
if (name.equals("吉利帝豪")) {
return new JiLiCar();
}
return new JiLiCar();
}
}
客户端;
package FactoryModel;
public class Client {
public static void main(String[] args) {
CarFactory bydFactory = new BydFactory();
Car bydCar = bydFactory.CreateCar("比亚迪F2");
bydCar.run();
Car bydcarE = bydFactory.CreateCar("比亚迪E6");
bydcarE.run();
CarFactory jiliFactory = new JiLiFactory();
Car jiliCar = jiliFactory.CreateCar("吉利帝豪");
jiliCar.run();
}
}
运行结果:
工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现
优点 客户端不需要在负责对象的创建,从而明确了个各类的职责,如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码,后期维护容易,增强了系统的扩展性
缺点 需要额外的编写代码 增加了工作量