设计模式---工厂模式(FactoryPattern)模式

今天开始学习工厂模式。

学习文章链接: https://blog.csdn.net/lemon_tree12138/article/details/46225213

工厂模式分为:
1、静态工厂模式
2、简单工厂模式
3、工厂方法模式
4、抽象工厂模式


一.静态工厂模式

这个最常见了,项目中的辅助类,TextUtil.isEmpty等,类+静态方法。略。

二.简单工厂模式

从简单的工厂模式开始说起的话,我们要知道工厂模式的目的是什么?工厂模式的目的在于程序的可扩展性。而对于简单工厂模式来说,它是为了让程序有一个更好地封装,降低程序模块之间的耦合程度。

对于简单的工厂模式,其实也可以将其理解成为一个创建对象的工具类。工具类的形式,可以仿造如下代码编写:

public interface Car {
    void show();
}
//奔驰汽车
class BenZ implements Car {

    @Override
    public void show() {
        System.out.println("生产出了奔驰汽车");
    }
}
//宝马汽车
class BMW implements Car {

    @Override
    public void show() {
        System.out.println("生产出了宝马汽车");
    }
}

工厂类的代码(也可以理解成工具类)如下:

public class Factory {

    public Car create(String tag) {
        if (tag.equals("A")) {
            return createBmw();
        } else if (tag.equals("B")) {
            return createBenZ();
        }

        return null;
    }

    private BenZ createBenZ() {
        return new BenZ();
    }

    private BMW createBmw() {
        return new BMW();
    }

}

测试代码如下:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Factory mFactory = new Factory();


        try {
            //传入不同参数从而创建产品实例
            mFactory.create("A").show();
        } catch (NullPointerException e) {
            System.out.println("没有宝马这一类产品");
        }

        try {
            mFactory.create("B").show();
        } catch (NullPointerException e) {
            System.out.println("没有奔驰这一类产品");
        }
        

        try {
            mFactory.create("C").show();
        } catch (NullPointerException e) {
            System.out.println("没有这一类产品");
        }
    }

}

打印出来的结果如下:

在这里插入图片描述
正如之前所说的,简单的工厂模式,就是去创建一个创建对象的工具类。在这个工具类里面,我们就可以进行一些其他操作,比如对象的初始化。这样就避免了把对象初始化的大量代码(如果有大量代码的话)放在构造函数里了。

三.工厂方法模式

之前说了简单的工厂模式,在简单的工厂模式里,我们创建了一个类似工具的类来创建相应的具体类对象。正因为其太过简单,有一点不成规范。所以,这里要对其做一些适当地封装。

扫描二维码关注公众号,回复: 8784551 查看本文章

我们来看一下工厂方法模式的定义吧。工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化哪一个。工厂方法让类把实例化推迟到了子类。(定义摘自《Head First设计模式》)

在这里插入图片描述

抽象工厂:

我们的抽象工厂可以是类似这样的:

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 是具有 Moveable 的属性。那么它的实现可以这样来写:

 public class Broom implements Moveable {
     
        @Override
        public void run() {
            System.out.println("我是Broom.我在飞...");
        }
     
    }

功能测试:

我们有工厂,并且知道了工厂要生产的产品了。那么我们就来生产一个 Broom 来试试吧:

    VehicleFactory factory = new BroomFactory();
    Moveable moveable = factory.create();
    moveable.run();

这样我就生产了一个 Broom 了。是不是很简单?

发布了81 篇原创文章 · 获赞 37 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/gaolh89/article/details/93380788
今日推荐