标签:步骤 factory 有一个 als out 扩展 依赖 cer 产品
创建一个接口:
public interface car {
void name();
}
创建实现接口的实体类
public class Ferrari implements car {
@Override
public void name() {
System.out.println("ferrari...");
}
}
public class Porsch implements car {
@Override
public void name() {
System.out.println("porsch...");
}
}
创建一个工厂,生成基于给定信息的实体类的对象
public class CarFactory {
public car name(String s) {
if (s.equals("porsch")) {
return new Porsch();
} else if (s.equals("ferrari")) {
return new Ferrari();
} else {
return null;
}
}
}
使用该工厂,通过传递类型信息来获取实体类的对象
public class Main {
public static void main(String[] args) {
CarFactory carFactory = new CarFactory();
car ferrari = carFactory.name("ferrari");
ferrari.name();
car porsch = carFactory.name("porsch");
porsch.name();
}
}
普通工厂模式有一个问题,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?这就用到了抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改的代码。
抽象工厂类的本质其实就是把之前工厂类负责提供不同产品实现类的功能再抽象出来变成一个接口,分别创建不同的工厂类实现该接口返回不同产品,这样在扩展时只需要创建新的工厂类实现接口即可。
创建产品的接口
public interface car {
void name();
}
创建产品实现类
public class Ferrari implements car {
@Override
public void name() {
System.out.println("ferrari...");
}
}
public class Porsch implements car {
@Override
public void name() {
System.out.println("porsch...");
}
}
创建工厂的接口
public interface Producer {
car produce();
}
创建工厂实现类
public class FerrariFactory implements Producer {
@Override
public car produce() {
return new Ferrari();
}
}
public class PorschFactory implements Producer {
@Override
public car produce() {
return new Porsch();
}
}
使用具体产品的工厂实现类获取实体类对象
public class Main {
public static void main(String[] args) {
Producer producer1 = new FerrariFactory();
car ferrari = producer1.produce();
ferrari.name();
Producer producer2 = new PorschFactory();
car porsch = producer2.produce();
porsch.name();
}
}
标签:步骤 factory 有一个 als out 扩展 依赖 cer 产品
原文地址:https://www.cnblogs.com/Water2Wine/p/13173183.html