工厂设计模式,这要是看不懂回家,继承家产吧,别来抢我饭碗。~~~

119 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

一、介绍

| 一、 什么是工厂设计模式? | |--|--| | 1、工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。 | | 2、这种类型的设计模式属于创建型模式,它提供了一种创建对象的方式。 | |3、之前我们创建类对象时, 都是使用new 对象的形式创建, 除new 对象方式以外,工厂模式也可以创建象。 |

| 二、 工厂设计模式的作用 | |--|--| | 1.对象通过工厂的方法创建返回,工厂的方法可以为该对象进行加工和数据注入。 | | 2.可以实现类与类之间的解耦操作(核心思想) | | 工厂模式的思想是提供一个工厂方法返回对象! |

|三、 好处| |--|--| | 1. 使用者不需要要关心对象的创建细节, 使用更加方便(创建的很复杂)|
| 2. 可以实现动态创建对象, 解耦|

二、前言

有的时候我们创建一个类的实例很是麻烦。 例如我定义了一个抽象类Computer, 然后我可以有2个实现类、分别是Huawe、Mac, 那么这2个实现类的属性、行为可以是相同的也可以是不同的,例如相同的可以是都可以有名称、价格、都有开机行为等

我现在希望,我只给定电脑的名称,就自动获取一个==对象内容相同的对象==,例如给定名称是 Huawei,那么就创建华为对象,如果是Mac就创建苹果电脑对象。

当然如果希望获取一个内容相同地址值也相同的对象那么就要考虑单例设计模式了

运行顺序演示: 在这里插入图片描述

三、具体设计:

1、Computer抽象类设计

在这里插入图片描述

package com.ligong.factory;
public abstract class Computer {
    private String name;
    private double price;

    public abstract void start();
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
}

2、Huawei实现类设计

在这里插入图片描述

package com.ligong.factory;

public class Huawei extends Computer {
    @Override
    public void start() {

        System.out.println(getName() + "开机了,展示了华为的菊花图标~~~~");
    }
}

3、Mac实现类设计

在这里插入图片描述

package com.ligong.factory;


public class Mac extends Computer {
    @Override
    public void start() {

        System.out.println(getName() + "以非常优雅的方法启动了,展示了一个苹果logo");
    }
}

4、工厂类设计

在这里插入图片描述

package com.ligong.factory;

public class ComputerFactory {
    /**
       定义一个方法,创建对象返回
     */
    public static Computer createComputer(String info){
        switch (info){
            case "huawei":
                Computer c = new Huawei();
                c.setName("huawei pro 16");
                c.setPrice(5999);
                return c;
            case "mac":
                Computer c2 = new Mac();
                c2.setName("MacBook pro");
                c2.setPrice(11999);
                return c2;
            default:
                return null;
        }
    }
}

四、运行截图,详细画图解释

在这里插入图片描述

在这里插入图片描述