设计模式——工厂模式

简单工厂模式

什么是简单工厂模式

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

示例

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

  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();
    }
}

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

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

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

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

那么看下简单工厂是如何处理的

  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();
    }
}

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

补充

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

工厂方法模式

什么是工厂方法模式

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


相关推荐
设计模式目录


在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值