欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java设计模式———简单工厂模式

程序员文章站 2022-10-03 17:23:56
简单工厂模式1 基本介绍:(1)简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产 品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式(2)简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)(3)在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会使用到工厂模式。2 例子以炒菜为例,简化为以下几个步骤:买菜 ==》 洗菜 ==》切菜 ==》 炒菜 ==》出锅上桌,我们将其转化为程序。首先不使用工厂模式,其U...

1 基本介绍:

(1)简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产 品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式
(2)简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)
(3)在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会使用到工厂模式。

2 例子

以炒菜为例,简化为以下几个步骤:买菜 ==》 洗菜 ==》切菜 ==》 炒菜 ==》出锅上桌,我们将其转化为程序。首先不使用工厂模式,其UML类图如下:
java设计模式———简单工厂模式

对应代码如下:

public abstract class Cooking {
    /**
     * 菜名
     */
    private String dishName;

    //买菜
    public abstract void groceryShopping();

    //洗菜
    public void cuciSayur() {
        System.out.println(dishName + "已经洗好了~");
    }

    public void cut() {
        System.out.println(dishName + "已经切好了~");
    }

    //炒菜
    public void cookVegetables() {
        System.out.println(dishName + "炒好了~");
    }

    //出锅上桌
    public void over() {
        System.out.println(dishName + "出锅上桌了~");
    }

    public void setDishName(String dishName) {
        this.dishName = dishName;
    }

}

public class Potato extends Cooking {

    public void groceryShopping() {
        System.out.println("go!go!go!买土豆");
    }
}
public class Tomato extends Cooking {
    public void groceryShopping() {
        System.out.println("go!go!go!买西红柿");
    }
}
public class Chef {
    public Chef() {
        Cooking cooking = null;

        while (true) {
            String dishName = getDishName();
            if (dishName.equals("potato")) {
                cooking = new Potato();
                cooking.setDishName(dishName);

            } else if (dishName.equals("tomato")) {
                cooking = new Tomato();
                cooking.setDishName(dishName);
            } else {
                break;
            }

            cooking.groceryShopping();
            cooking.cuciSayur();
            cooking.cut();
            cooking.cookVegetables();
            cooking.over();

        }

    }


    public static String getDishName() {
        String dishName = new Scanner(System.in).nextLine();
        return dishName;
    }

}


启动类:

public class Test {
    public static void main(String[] args) {
        new Chef();
    }
}

启动后我们输入tomato或者potato输出结果如下:
java设计模式———简单工厂模式
输出其他结果则终止程序。由此我们的程序告一段落。看似基本步骤都已经有了,但若此时我们们将主程序看成一个厨师,当有多个厨师且菜品种类发生变化时,此时,我们新增一个菜品类,我们每一个厨师类都需要修改,此时改动量就非常大了。由此我们引入简单工厂方法。

引入简单工厂模式后,新的UML类图如下:
java设计模式———简单工厂模式
引入简单工厂如下:

public class SimpleFactory {

    public Cooking createCookingTest(String dishName) {
        Cooking cooking = null;
        if (dishName.equals("potato")) {
            cooking = new Potato();
            cooking.setDishName(dishName);

        } else if (dishName.equals("tomato")) {
            cooking = new Tomato();
            cooking.setDishName(dishName);
        }
        return cooking;
    }

}

并对原来厨师类进行更改,更改后如下:

public class Chef {

    private SimpleFactory simpleFactory;

    public Chef(SimpleFactory simpleFactory) {
        setSimpleFactory(simpleFactory);
    }


    public void setSimpleFactory(SimpleFactory simpleFactory) {

        this.simpleFactory = simpleFactory;

        while (true) {
            String dishName = getDishName();
            Cooking cooking = this.simpleFactory.createCookingTest(dishName);
            if (cooking != null) {
                cooking.groceryShopping();
                cooking.cuciSayur();
                cooking.cut();
                cooking.cookVegetables();
                cooking.over();
            } else {
                System.out.println("程序结束");
                break;
            }
        }
    }

    public static String getDishName() {
        String dishName = new Scanner(System.in).nextLine();
        return dishName;
    }

}


启动类:

public class Test{
    public static void main(String[] args) {
//        new Chef ();
        new Chef (new SimpleFactory());
    }
}

启动后与使用原来未加入简单工厂模式并无差异,但在加入新的菜时,我们就无需像之前那样,代码改动非常大了,我们只需要在工厂类中进行修改即可。
(注:工厂也可做成静态的)

本文地址:https://blog.csdn.net/weixin_45617480/article/details/107594535