(一)简单工厂模式

一、简单工厂介绍

在现实生活中工厂是负责生产产品的,在设计模式中简单工厂也可以理解为负责生产对象的一个类
简单工厂实现思路:封装改变,找到改变的代码然后把改变的代码用类封装起来。

二、案例列举

在外面打工的人,免不了要经常在外面吃饭,当然我们也可以自己在家
做饭吃,但是自己做饭吃麻烦,因为又要自己买菜,然而,出去吃饭就
完全没有这些麻烦的,我们只需要到餐馆点菜就可以了,买菜的事情就
交给餐馆做就可以了,这里餐馆就充当简单工厂的角色,下面让我们看
看现实生活中的例子用代码是怎样来表现的。

代码编写:


/**
 * 顾客充当客户端,负责调用简单工厂来生产对象即客户点菜,
 * 厨师(相当于简单工厂)负责烧菜(生产的对象)
 */
public class Customer {
    public static void main(String[] args) {
        // 客户想点一个西红柿炒蛋
        Food food1 = FoodSimpleFactory.CreateFood("西红柿炒蛋");
        food1.Print();

        // 客户想点一个土豆肉丝
        Food food2 = FoodSimpleFactory.CreateFood("土豆肉丝");
        food2.Print();
    }
}

/**
 * 菜抽象类
 */
public abstract class Food {
    // 输出点了什么菜
    public abstract void Print();
}

/**
 * 简单工厂类, 负责 炒菜.
 */
public class FoodSimpleFactory {
    public static Food CreateFood(String type) {
        Food food = null;
        if (type.equals("土豆肉丝")) {
            food = new ShreddedPorkWithPotatoes();
        } else if (type.equals("西红柿炒蛋")) {
            food = new TomatoScrambledEggs();
        }

        return food;
    }
}
/**
 * 土豆肉丝这道菜
 */
public class ShreddedPorkWithPotatoes extends Food {
    @Override
    public void Print() {
        System.out.println("一份土豆肉丝");
    }
}


/**
 * 西红柿炒鸡蛋这道菜
 */
public class TomatoScrambledEggs extends Food{
    @Override
    public void Print() {
        System.out.println("一份西红柿炒蛋!");
    }
}

自己做饭,如果我们想吃别的菜时,此时就需要去买这种菜和洗菜这些繁琐的
操作,有了餐馆(也就是简单工厂)之后,我们就可以把这些操作交给餐馆去
做,此时消费者(也就是我们)对菜(也就是具体对象)的依赖关系从直接变
成的间接的,这样就是实现了面向对象的另一个原则——降低对象之间的耦合
度,下面就具体看看有了餐馆之后的实现代码(即简单工厂的实现)


UML图:

这里写图片描述

三、缺点和应用场景

缺点:
1,工厂类集中了所有产品创建逻辑,一旦不能工作,整个系统都会受
到影响。
2,系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,这就造成
工厂逻辑负责。

应用场景:
1,当工厂类负责创建对象比较少时,可以考虑使用简单工厂。
2,客户如果只知道传入工厂参数,对应如何创建逻辑不关心,可以考
虑使用简单工厂。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值