java设计模式:(工厂模式)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wanghang88/article/details/82057386

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:总结;

以上就是工厂模式的基本实现和详细说明。包括了简单工厂模式、工厂方法模式、抽象工厂模式。我们可以基于需求来选择合适的工厂模式。

猜你喜欢

转载自blog.csdn.net/wanghang88/article/details/82057386