工厂方法模式UML类图
了解过简单工厂的读者会发现,工厂模式只是在简单工厂模式中将生成产品的方法进一步抽象,从而使客户端不需要依赖具体的工厂,只需要依耐抽象工厂,从而实现客户端与具体工厂直接的解耦,如果我们再需要增加某一个产品和对应的工厂,我们只需要实现该抽象工厂的接口即可,同时客户端使用反射,由配置文件生成对应的工厂。
如上图UML类图的例子,对于Light有BulLight和TubeLight,对应生产工厂有BulCreator和TubeCreator。
使用工厂方法模式
1、将产品相同性质的方法进行的抽象
public interface Light {
public void turnOn();
public void turnOff();
}
2、产品的具体实现
public class BulbLight implements Light {
@Override
public void turnOn() {
System.out.println("BulbLight TurnOn");
}
@Override
public void turnOff() {
System.out.println("BulbLight TurnOff");
}
}
public class BulbCreator implements Creator{
@Override
public Light factory() {
return new BulbLight();
}
}
3、将创建产品的方法进行抽象
public interface Creator {
public Light factory();
}
4、实现具体的创建方法
public class TubeCreator implements Creator{
@Override
public Light factory() {
return new TubeLight();
}
}
public class BulbCreator implements Creator{
@Override
public Light factory() {
return new BulbLight();
}
}
5、客户端(发现客户端可以做到完全只依赖于抽象工厂和抽象产品)
public class Client {
public static void main(String[] args) {
Creator creator = new BulbCreator(); //这里可以使用反射配置具体的工厂
Light light = creator.factory();
light.turnOn();
light.turnOff();
}
}
客户端可以使用反射,实现完全解耦