1:工厂模式是一种比较常见的创建模式, 在实际开发中也是常常使用到。
2:工厂模式的形式:
2.1)简单工厂模式,而对于简单工厂模式来说,它是为了让程序有一个更好地封装,降低程序模块之间的耦合程度,对于简单的工厂模式,其实也可以将其理解成为一个创建对象的工具类。在这个工具类里面,我们就可以进行一些其他操作,比如对象的初始化。这样就避免了把对象初始化的大量代码(如果有大量代码的话)放在构造函数里了。
具体的代码实现:
public class SimpleFactory {
public Object create(Class<?> clazz) {
if (clazz.getName().equals(Plane.class.getName())) {
return createPlane();
} else if (clazz.getName().equals(Broom.class.getName())) {
return createBroom();
}
return null;
}
private Broom createBroom() {
return new Broom();
}
private Plane createPlane() {
return new Plane();
}
}
简单工厂模式的测试:
public class FactoryTest {
public static void main(String[] args) {
// 简单工厂模式测试
SimpleFactory simpleFactory = new SimpleFactory();
Broom broom = (Broom) simpleFactory.create(Broom.class);
broom.run();
}
}
2.2)工厂方法模式:
在简单的工厂模式里,我们创建了一个类似工具的类来创建相应的具体类对象。正因为其太过简单,有一点不成规范,要对其做一些适当地封装,工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化哪一个。
具体的代码实现:
抽象工厂:
public abstract class VehicleFactory {
public abstract Moveable create();
}
具体工厂:
public class BroomFactory extends VehicleFactory {
@Override
public Moveable create() {
return new Broom();
}
}
这个具体的实现工厂告诉我们,这里可以通过 create() 方法来创建一个 Broom 对象,有一个大的工厂它就是 VehicleFactory,VehicleFactory工厂里又有很多生产车间,其中有一个就是 BroomFactory。
抽象产品接口:
public interface Moveable {
public void run();
}
具体产品:这是一些可以run(移动)的产品。就 BroomFactory 生产车间而言,它负责生产 Broom,这个 Broom 是具有 run的功能(也就是Moveable 接口),
public class Broom implements Moveable {
@Override
public void run() {
System.out.println("我是Broom.我在飞...");
}
}
工厂方法测试:
VehicleFactory factory = new BroomFactory();
Moveable moveable = factory.create();
moveable.run();
2.3)抽象工厂模式:
对于具体工厂A和B需要生产一些同类型的不同产品。那么我们就可以试试抽象工厂模式。
抽象工厂的定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类,我们的抽象工厂中包含一系列的去构造一个抽象产品的方法,而具体产品的实现则是放在了具体工厂。
抽象工厂的具体代码实现:
抽象工厂:
public abstract class AbstractFactory {
public abstract Flyable createFlyable();
public abstract Moveable createMoveable();
public abstract Writeable createWriteable();
}
具体工厂:从抽象工厂的代码中也可以看出,抽象工厂只是去“生产”一些抽象的东西。有点类似于底层机制的感觉。
public class Factory1 extends AbstractFactory {
@Override
public Flyable createFlyable() {
return new Aircraft();
}
@Override
public Moveable createMoveable() {
return new Car();
}
@Override
public Writeable createWriteable() {
return new Pen();
}
}
抽象产品接口:在具体工厂里,我们就可以生产一些具体的产品了。就是这里的Aircraft、Car、Pen。抽象的产品接口如下。
public interface Flyable {
public void fly(int height);
}
具体产品:
public class Aircraft implements Flyable {
public void fly(int height) {
System.out.println("我是一架客运机,我目前的飞行高度为:" + height + "千米。");
}
}
抽象工厂测试:
public class FactoryTest {
public static void main(String[] args) {
AbstractFactory factory = new Factory1();
Flyable flyable = factory.createFlyable();
flyable.fly(1589);
Moveable moveable = factory.createMoveable();
moveable.run(87.6);
Writeable writeable = factory.createWriteable();
writeable.write("Hello World.");
}
}
3:总结;
以上就是工厂模式的基本实现和详细说明。包括了简单工厂模式、工厂方法模式、抽象工厂模式。我们可以基于需求来选择合适的工厂模式。