Java设计模式之创建型:工厂模式详解(简单工厂+工厂方法+抽象工厂)

前言

我们用一个开发订购披萨项目的故事来讲解

项目需求:要便于披萨种类的扩展,要便于维护

(1)披萨的种类很多(比如GreekPizza、CheesePizza)

(2)披萨的制作流程有 prepare、bake、cut、box

(3)完成披萨店订购功能

传统模式

如下代码中,我们写代码的逻辑会将大量的代码写在一块,造成了代码高耦合的情况,当我们要增加新的功能模块或修改某处功能等情况时,往往要修改多个地方,这样就造成程序可维护性、可扩展性、可读性、可重用性低的情况。

Pizza orderPizza(String type) {
		Pizza pizza;
		if(type.equals("chess"){
			pizza = new ChessPizza();
		}else if(type.equals("greek"){
			pizza = new GreekPizza();
		}else if(type.equals("apple"){
			pizza = new ApplePizza();
		}
		....
		//准备材料	
		pizza.prepare();
		//烘烤
		pizza.bake();
		//切
		pizza.cut();
		//装盒
		pizza.box();
		return pizza;
	}

传统模式UML图 

简单工厂模式:

基本介绍:

1.简单工厂模式为创建型模式,是工厂模式家族中最简单实用的模式。简单工厂模式是由一个工厂对象决定创建哪一种产品类的实例,也就是把其他类(产品)的实例化对象放到工厂类中,需要什么对象(产品)直接从工厂类中拿。

2.简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)

3.在软件开发中,当我们用到大量的创建某种、某类或某批对象时,就会用到工厂模式。

将传统模式代码进行如下修改,其中SimpleFactory类为工厂类,对pizza进行加工等操作,将原来经常修改的代码抽取了出来。

SimpleFactory类

public class OrderPizza {

    public OrderPizza(SimpleFactory factory){
        setFactory(factory);
    }
    SimpleFactory factory = null;

    public void setFactory(SimpleFactory simpleFactory){
        String orderType = "";//用户输入的

        this.factory = simpleFactory;
        do{
            orderType = getType();
            Pizza pizza = factory.createPizza(orderType);
            if (pizza != null){
                pizza.prepare();
                pizza.bake();
                pizza.cut();
                pizza.box();
            }else {
                System.out.println("订购Pizza失败!");
                break;
            }

        }while (true);
    }
    //写一个方法 可以获取客户希望订购的pizza
    private String getType() {
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("请在下面输入你要购买的Pizza");
            String pizza = reader.readLine();
            return pizza;
        } catch (IOException e) {
            e.printStackTrace();
            return "";
        }
    }
}

简单工厂模式的优缺点:

优点:        

        简单工厂模式提供专门的工厂类用于创建对象,实现了对象创建和使用的职责分离,客户端不需知道所创建的具体产品类的类名以及创建过程,只需知道具体产品类所对应的参数即可,通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。

     

缺点:

        但缺点在于不符合“开闭原则”,每次添加新产品就需要修改工厂类。在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展维护,并且工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。

        为了解决简单工厂模式的问题,出现了工厂方法模式。

后续待补充.......

工厂方法

抽象工厂

此文参考两篇工厂模式优质文章:

Java设计模式之创建型:工厂模式详解(简单工厂+工厂方法+抽象工厂)

工厂模式超详解!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值