设计模式——工厂模式

简单工厂模式

什么是简单工厂模式

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

示例

一个面包的订购过程的创建

  1. 创建面包类
package leeyf.factory.simplefactory.breadstore.bread;

public abstract class Bread {
    String name;//面包的名字

    public abstract void prepare();//制作前的准备工作,不同种类的面包准备的原材料肯定不同,但是都会经过同样的烘焙工序和打包流程

    public void bake() {
        System.out.println(name + " 制作中~");
    }

    public void box(){
        System.out.println(name + " 打包中~");s
    }
}

2.创建面包对象类(BlackBread、FrenchBread)

package leeyf.factory.simplefactory.breadstore.bread;

public class BlackBread extends Bread {
    @Override
    public void prepare() {
        System.out.println("黑面包制作的准备工作");
    }
}
package leeyf.factory.simplefactory.breadstore.bread;

public class FrenchBread extends Bread {
    @Override
    public void prepare() {
        System.out.println("制作法式面包的准备工作");
    }
}
  1. 创建订购类(OrderBread)

执行订购的逻辑操作

package leeyf.factory.simplefactory.breadstore.order;

import leeyf.factory.simplefactory.breadstore.bread.BlackBread;
import leeyf.factory.simplefactory.breadstore.bread.Bread;
import leeyf.factory.simplefactory.breadstore.bread.FrenchBread;

import java.util.Scanner;

public class OrderBread {

    public OrderBread() {
        Bread bread = null;
        String oderType = null;

        do {
            oderType = getBreadType();
            if(oderType.equals("blackBread")){
                bread = new BlackBread();
                bread.setName("黑面包");
            }else if(oderType.equals("freachBread")){
                bread = new FrenchBread();
                bread.setName("法式面包");
            }else {
                break;
            }
			bread.prepare();
            bread.bake();
            bread.box();

        }while (true);
    }

    public String getBreadType(){
        System.out.println("input pizza type:");
        Scanner scanner = new Scanner(System.in);
        return scanner.nextLine();
    }
}

  1. 创建面包店类(BreadStore)
    调用订购方法测试
package leeyf.factory.simplefactory.breadstore.order;

public class BreadStore {
    public static void main(String[] args) {
        new OrderBread();
    }
}

<mark>如果,我们现在需要添加一个新面包,那么我们的操作是什么?</mark>

首要要明白,这样的订购类不只这么一个,每个店铺都会有一个,那么如果修改订购类就要把全部的订购类都修改

  1. 创建新面包的对象类
  2. 修改订购类里面 的逻辑过程

此处就会出现一个问题,每创建一个新对象都需要频繁修改订购类

<mark>那么看下简单工厂是如何处理的</mark>

  1. 创建一个简单工厂类
package leeyf.factory.simplefactory.breadstore.order;

import leeyf.factory.simplefactory.breadstore.bread.BlackBread;
import leeyf.factory.simplefactory.breadstore.bread.Bread;
import leeyf.factory.simplefactory.breadstore.bread.FrenchBread;

public class SimpleFactory {
    public Bread createBread(String breadType){
        Bread bread = null;
        System.out.println("这是一个简单工厂模式");
        if(breadType.equals("blackBread")){
            bread = new BlackBread();
            bread.setName("黑面包");
        }else if(breadType.equals("frenchBread")){
            bread = new FrenchBread();
            bread.setName("法式面包");
        }else {
            System.out.println("当前没有该种类面包");
        }
        return bread;
    }
}

2.修改订购类

package leeyf.factory.simplefactory.breadstore.order;

import leeyf.factory.simplefactory.breadstore.bread.Bread;

import java.util.Scanner;

public class OrderBread {

    //定义一个简单工厂对象
    SimpleFactory simpleFactory = null;
    Bread bread = null;

    public void setSimpleFactory(SimpleFactory simpleFactory) {
        String orderType =""; //用户输入
        this.simpleFactory = simpleFactory;

        do {
            orderType = getBreadType();
            bread = simpleFactory.createBread(orderType);//简单工厂模式的使用

            if(bread!=null){
                bread.prepare();
                bread.bake();
                bread.box();
            }else {
                System.out.println("当前没有该种类面包");
            }
        }while (true);
    }

    public String getBreadType(){
        System.out.println("input bread type:");
        Scanner scanner = new Scanner(System.in);
        return scanner.nextLine();
    }
}

把创建对象封装到一个对象类中,这样有新的对象被创建时,只需要修改该类就可以,其他有创建到对象的代码就不需要修改了
<mark>使用了简单工厂类,就会发现当新增加一个种类面包之后,不需要再频繁修改订单类,只需要统一修改简单工厂类就可以</mark>

补充

简单工厂模式又叫静态工厂模式,把简单工厂的创建方法修改成为静态方法,那么就可以直接调用

工厂方法模式

什么是工厂方法模式

定义了一个创建对象的抽象方法,由子类决定要实例化的类,工厂方法模式将<mark>对象的实例化推迟到子类</mark>
未完待续~


相关推荐
设计模式目录


全部评论

相关推荐

11-18 15:57
门头沟学院 Java
最终归宿是测开:这个重邮的大佬在重邮很有名的,他就喜欢打92的脸,越有人质疑他,他越觉得爽😂
点赞 评论 收藏
分享
10-30 22:18
已编辑
毛坦厂中学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务