之前的简单工厂模式,我们不是觉得没有满足开闭原则?
这个就是我们工厂方法的意义!
抽象工厂角色: 工厂角色必须实现的接口或者必须继承的父类。这个每人具体的产品对应一个工厂的实现类。
具体工厂角色:它含有和具体业务逻辑有关的代码,对应一个产品
抽象产品角色:它是具体产品继承的父类或者是实现的接口。
具体产品角色:具体工厂角色所创建的对象就是此角色的实例
这个和我们之前的图像没得区别吧
看图!其实都是差不多的
我们的汽车。抽象的汽车,和具体的实现类!
抽象产品
abstract class Car{
private String name;
public abstract void drive();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//具体产品
class Benz extends Car{
public void drive(){
System.out.println(this.getName()+"----go-----------------------");
}
}
class Bmw extends Car{
public void drive(){
System.out.println(this.getName()+"----go-----------------------");
}
}
工厂类,一个汽车对应一个实现的工厂
//抽象工厂
abstract class Driver{
public abstract Car createCar(String car) throws Exception;
}
//具体工厂(每个具体工厂负责一个具体产品)
class BenzDriver extends Driver{
public Car createCar(String car) throws Exception {
return new Benz();
}
}
class BmwDriver extends Driver{
public Car createCar(String car) throws Exception {
return new Bmw();
}
}
Driver d = new BenzDriver(); 工厂实现类,产生汽车哦,下面
Car c = d.createCar("benz");
c.setName("benz");
c.drive();
每当我们创建一个具体的产品的时候,都有对应与之实现的工厂类。这样的话我们就满足的开闭原则,可扩展性比较的好。慢慢的学习哦,我也会慢慢的理解这些东西。多看几次就好了。以前不懂,看过几变我相信就会慢慢的理解这些东西啦。
我们和之前的工厂模式一样的,也是对于客服端隐藏了具体的实现类。你懂得哦~