设计模式系列--23种常见设计模式之简单工厂(8)

简单工厂:

实际的使用需求只和工厂对接,不关注具体的实现过程,需要什么,告诉工厂,工厂直接给我们返回产品。

比如:我们现在设置了一个产品类型Product,下属有苹果Apple,香蕉Banana,橘子Orange等等;

现在有一个工厂类 FruitFactory,专门生产Product,具体生产哪个,你告诉我名字就行getProduct(String name).

这就是一个简单工厂类的实现过程,工厂作为交互类,细节工厂决定,需求由目标群体决定。

产品类:

package cn.pers.sample.simplefactory;

import lombok.Getter;
import lombok.Setter;

/**
 * @author WeiSong <br>
 * @since 0.0.1
 * 2020/7/20 14:13
 */
@Setter
@Getter
public abstract class Product {

    public String color;
    public String weight;
    public String name;
    public String desc;

    public void printName(){
        System.out.println(this.name);
    }

    public void printMethod(){
        System.out.println("生产了一个水果.");
    }


    public abstract void printInfo();
}

产品线下的两个具体产品:

package cn.pers.sample.simplefactory;

import lombok.Getter;
import lombok.Setter;

/**
 * @author WeiSong <br>
 * @since 0.0.1
 * 2020/7/20 13:58
 */
@Getter
@Setter
public class Apple extends Product {

    private String type;
    private String shape;

    @Override
    public void printInfo() {
        //System.out.println(this.type + ":" + this.shape);
        System.out.println("苹果,圆形,红色");
    }
}
package cn.pers.sample.simplefactory;

import lombok.Getter;
import lombok.Setter;

/**
 * @author WeiSong <br>
 * @since 0.0.1
 * 2020/7/20 13:59
 */
@Getter
@Setter
public class Banana extends Product{

    private String type;
    private String shape;

    @Override
    public void printInfo() {
        System.out.println("香蕉,弯曲形状,黄色");
    }
}

下面是我们的工厂类,根据具体的要求生产对应的产品:

package cn.pers.sample.simplefactory;

/**
 * @author WeiSong <br>
 * @since 0.0.1
 * 2020/7/20 14:00
 */
public class FruitFactory {

    public static Product getProduct(String type) {
        if ("apple".equalsIgnoreCase(type)) {
            return new Apple();
        } else if ("banana".equalsIgnoreCase(type)) {
            return new Banana();
        } else {
            throw new RuntimeException("暂不支持该种类型水果.");
        }
    }

}

最后是我们的外部使用方式,直接和工厂交互:

package cn.pers.sample.simplefactory;

/**
 * 一个抽象产品,一个工厂类,提供必需的信息,工厂生产对应的产品,客户端不关注实现过程。<br></>
 * 简单工厂:实际的使用需求只和工厂对接,不关注具体的实现过程,需要什么,告诉工厂,工厂直接给我们返回产品。
 * @author WeiSong <br>
 * @since 0.0.1
 * 2020/7/20 14:22
 */
public class Main {

    public static void main(String[] args) {
        final Product apple = FruitFactory.getProduct("apple");
        apple.printMethod();
        apple.printInfo();

        final Product banana = FruitFactory.getProduct("banana");
        banana.printMethod();
        banana.printInfo();

    }
}

生产效果:

生产了一个水果.
苹果,圆形,红色
生产了一个水果.
香蕉,弯曲形状,黄色

编者按:

简单工厂模式不属于标准的23种设计模式之一,但一般都作为基础的一种模式来学习,提供了我们的一种思路和方式,依赖抽象,为后面的工厂方法和抽象工厂提供了敲门砖。
一句话,工厂生产抽象化的产品,工厂和外部交互,工厂是分界线。

猜你喜欢

转载自blog.csdn.net/weisong530624687/article/details/109639195