工厂模式 分为 简单工厂模式,工厂方法模式和 抽象工厂方法模式。
工厂方法模式用于定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体的子类工厂类当中。这个要求满足创建与使用相分离的特点。
首先我们创建一个 net.haicoder.factory.facrotyMethod
包,在该包下面创建 AbstractProduct.java
、BusProduct.java
、 CarProduct.java
、 FactoryMethod.java
、 BusFactory.java
、 CarFactory.java
和 TestMain.java
文件。文件创建完毕,目录结构如下图:
AbstractProduct.java
文件具体代码如下:
package net.haicoder.factory.facrotyMethod;
public abstract class AbstractProduct {
protected abstract void produceProduct();
}
BusProduct.java
文件具体代码如下:
package net.haicoder.factory.facrotyMethod;
public class BusProduct extends AbstractProduct {
protected void produceProduct() {
System.out.println("嗨客网(www.haicoder.net)");
System.out.println("Hello , I am a new Bus");
}
}
CartProduct.java
文件具体代码如下:
package net.haicoder.factory.facrotyMethod;
public class CarProduct extends AbstractProduct {
protected void produceProduct() {
System.out.println("嗨客网(www.haicoder.net)");
System.out.println("I am a new Car");
}
}
FactoryMethod.java
文件具体代码如下:
package net.haicoder.factory.facrotyMethod;
public abstract class FactoryMethod {
public abstract AbstractProduct getProduct();
}
BusFactory.java
文件具体代码如下:
package net.haicoder.factory.facrotyMethod;
public class BusFactory extends FactoryMethod {
public AbstractProduct getProduct() {
return new BusProduct();
}
}
CarFactory.java
文件具体代码如下:
package net.haicoder.factory.facrotyMethod;
public class CarFactory extends FactoryMethod {
public AbstractProduct getProduct() {
return new CarProduct();
}
}
TestMain.java
文件具体代码如下:
package net.haicoder.factory.facrotyMethod;
public class TestMain {
public static void main(String[] args) {
FactoryMethod carFactory = new CarFactory();
carFactory.getProduct().produceProduct();
FactoryMethod busFactory = new BusFactory();
busFactory.getProduct().produceProduct();
}
}
程序运行后,控制台输出如下信息:
工厂模式总结
设计模式中的工厂模式 ,一个产品对应一个工厂,创建一个对象通过调用工厂来产生。需要定义一个抽象的工厂方法,用来产生一个抽象的对象,每个工厂都要继承该抽象工厂类,用来实现对象的产生。