public abstract class Factory {
public abstract Product createProduct(String owner);
public abstract void registerProduct(Product p);
public abstract void getAllProductOwner();
public Product create(String owner){
Product p = createProduct(owner);
registerProduct§;
return p;
}
}
2、IDCardFactory类
package designMode.factory;
import java.util.ArrayList;
import java.util.List;
public class IDCardFactory extends Factory {
List owners = new ArrayList();
public Product createProduct(String owner){
System.out.println(“为 “+owner+” 创造产品成功…”);
return new IDCardProduct(owner);
}
@Override
public void registerProduct(Product p) {
String owner=((IDCardProduct)p).getOwner();
owners.add(owner);
System.out.println(“注册 “+owner+” 的产品成功…”);
}
@Override
public void getAllProductOwner() {
for(int i=0;i<owners.size();i++){
System.out.println(“产品用户:”+owners.get(i));
}
}
}
3、抽象类
package designMode.factory;
public abstract class 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 Product {
public abstract void use();
}
4、 具体实现类
package designMode.factory;
public class IDCardProduct extends Product {
String owner;
public IDCardProduct(String owner) {
this.owner = owner;
}
@Override
public void use() {
System.out.println(“用户 “+owner+” 正在使用产品…”);
}
public String getOwner() {
return owner;
}
}
5、测试类
package designMode.factory;
public class FactoryMain {
public static void main(String[] args) {
Factory f = new IDCardFactory();
Product p=f.create(“江疏影”);
p.use();
System.out.println(“--------------------”);
p=f.create(“邱淑贞”);
p.use();
System.out.println(“--------------------”);
f.getAllProductOwner();
}
}
6、控制台输出
至此我们可以看到在工厂抽象类里面定义了创造产品和注册产品,然后在实现类里面真的进行创造和注册产品。
对于抽象类,必须有构造函数,因为子类的初始化需要先调用抽象类的构造函数,然后是子类的构造函数;但是抽象类的构造函数不能定义成抽象的,因为如果这样的话,将不能被实现,因此没有抽象的构造函数。
六、JDK中的工厂模式