设计模式之工厂方法模式

设计模式之工厂方法模式

(一)什么是工厂方法模式

  工厂方法模式也称为多态工厂模式,也是对象的创建模式。定义了一个创建产品对象的工厂接口或抽象类,将实际创建工作推迟到它的实现类或子类当中。核心工厂类不再负责产品的创建,这样核心类就成为了一个抽象工厂角色,仅仅负责定义具体工厂类必须实现的借口,具体产品的创建,交给与其对应的核心工厂类的具体实现类或子类 。

(二)工厂方法模式中的角色 

  1. 抽象工厂角色

    工厂方法模式的核心,任何具体工厂类必须实现这个借口或抽象类。

  2. 具体工厂角色

    抽象工厂的具体实现类,负责具体产品的创建。

  3. 抽象产品角色

    所创建的所有对象的父类,它负责描述所有实例的共有接口。

  4. 具体产品角色

    工厂方法所创建的具体实例对象

(三)工厂方法模式的具体实现

   1. 抽象工厂

  定义了一个接口,包含一个抽象方法返回Fruit对象

public interface FruitFactory {
    Fruit getFurit();
}

  2. 具体工厂

  定义了两个具体工厂类AppleFactory和OrangeFactory,实现了抽象工厂FruitFactory接口,返回具体的产品对象

public class AppleFactory implements FruitFactory {

    @Override
    public Fruit getFurit() {
        return new Apple();
    }

}


public class OrangeFactory implements FruitFactory {

    @Override
    public Fruit getFurit() {
        return new Orange();
    }

}

  3. 抽象产品

  定义了一个抽象产品类Fruit

public interface Fruit {
    void get();
}

  4. 具体产品

  定义了两个具体产品类Apple和Orange实现了Fruit接口

public class Apple implements Fruit {

    @Override
    public void get() {
        System.out.println("苹果采摘");
    }

}


public class Orange implements Fruit {

    @Override
    public void get() {
        System.out.println("橘子采摘");
    }

}

  测试:

public class Test {
    public static void main(String[] args) {
        FruitFactory appleFactory = new AppleFactory();
        Fruit apple = appleFactory.getFurit();
        FruitFactory orangeFactory = new OrangeFactory();
        Fruit orange = orangeFactory.getFurit();
        apple.get();
        orange.get();
    }
}

(四)工厂方法模式与简单工厂模式的比较  

  工厂方法类的核心是一个抽象类或接口,需要具体工厂类实现这个接口,而不同具体产品对应不同的具体工厂类,用于创建对应的具体类;简单工厂模式的核心类是一个具体的类,由这个工厂类创建具体的对象。

  换个角度说,工厂方法模式就是每一个具体类(这些具体类有着共同的父类)都有一个与其对应的工厂类负责创建这个类的对象,而这些工厂类实现了同一个抽象工厂接口。

  当有新的具体类添加时,源代码不用修改,只需将给类实现具体类的共同父类,创建一个与该类对象的具体工厂类并实现抽象工厂方法即可。

可以演变成简单工厂模式。

原文地址:https://www.cnblogs.com/gdy1993/p/9150607.html