卖水果老板讲解设计模式之工厂模式

走一走百度百科

🌐工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。

一般来说这里分为:简单工厂模式、工厂模式、抽象工厂模式这三种,其实简单工厂和工厂差不多,结合一起理解,在这里我想强调各位看官我希望是已经了解过工厂模式的,不然后面看起来会懵懵的,但是如果说你的阅读理解能力还不错的话,当我没说哈,得不偿失,可以先去了解工厂模式,再来开水果店,如果已经了解过了,那就往下看吧!🍍

接下来,请各位看官将自己想象成一位水果店的大老板!
在这里插入图片描述

水果店开张前的准备

🔥🔥🔥生意兴隆🔥🔥🔥

进货

店铺开张之前,最重要的就是你这个店的进货问题啦,假设现在进货进了香蕉🍌、苹果🍎、橙子(或者叫橘子,无所谓)🍊,进这些货,我最重要的就是要了解这些水果的信息
工厂模式:
定义一个接口,这个接口叫做Fruit:

/**
 * 水果接口
 */
public interface Fruit {
   /**
    * 水果信息
    * @return
    */
   String getFruitInfo();
}

接下来就是让这三种水果实现这个接口啦:都是水果嘛
🍎

/**
 * 苹果
 */
public class Apple implements Fruit {
   private String description;

   public String getFruitInfo()
   {
	   description = " 苹果: \n\n苹果富含矿物质和维生素,为人们最常食用的水果之一";
	   return description;
   }
}

🍌🍌

/**
 * 香蕉
 */
public class Banana implements Fruit
{
   private String description;

   public String getFruitInfo()
   {
	description = "香蕉: \n\n香蕉味香、富含营养,植株为大型草本,从根状茎发出,由叶鞘下部形成高3~6米(10~20尺)的假杆";
	return description;
   }
}

🍊

/**
 * 橙子
 */
public class Orange implements Fruit
{
   private String description;

   public String getFruitInfo()
   {
	   description = "橙子: \n\n橙子可以剥皮鲜食其果肉,果肉可以用作其他食物的调料或附加物";
	   return description;
   }
}

得到这三种水果的信息之后,就要去跟水果市场老板拿货啦,水果市场老板对不同种类的水果都会有一片果园,这里有多种多样的水果,并且不同的果园产不同的水果,这里就是我们的“工厂”🌿🌿🌿,那么我们现在就去找工厂吧!

找水果厂

接下来,去找一下不同类型的水果工厂:
🍎

/*
 * 苹果工厂:生产苹果
 * */
public class AppleFactory {

    public Apple createApple(){
        Apple apple = new Apple();
        return apple;
    }
}

🍌香蕉工厂

/*
* 香蕉工厂:生产香蕉
* */
public class BananaFactory {
    public Banana createBanana(){
        Banana banana = new Banana();
        return banana;
    }
}

🍊橘子工厂

/*
* 橘子工厂:生产橘子
* */
public class OrangeFactory {
    public Orange createOrange(){
        Orange orange = new Orange();
        return orange;
    }
}

🆗,现在工厂也已经找好了,那么现在先来演示一下进货情况吧!

/*
* 进货单
* */
public class Order {
    public static void main(String[] args) {
        System.out.println("老板好,以下是你的进货单!");
        System.out.println("苹果厂生产的苹果....");
        AppleFactory appleFactory = new AppleFactory();
        Apple apple = appleFactory.createApple();
        System.out.println("香蕉厂生产的香蕉....");
        BananaFactory bananaFactory = new BananaFactory();
        Banana banana = bananaFactory.createBanana();
        System.out.println("橘子厂生产的橘子....");
        OrangeFactory orangeFactory = new OrangeFactory();
        Orange orange = orangeFactory.createOrange();
        System.out.println("进货单如上");

    }
}

🍍🍍🍍🍍
在这里插入图片描述
现在你遇到了另一个难题,如果说我每次进货都要和3个水果工厂老板打电话,非常麻烦,可不可以就找一家工厂呢?这个工厂既可以生产苹果,又可以生产橘子,这样我要进货的话,就直接和这个厂家老板打电话就好了🙋‍♀️
巧了,刚好有一家!

找“厉害”的水果厂

这个厂家的地址

public abstract class AbstractFactory {
    public abstract <T extends Fruit> T createFruit(Class<T> c);
}

这个厂家生产水果的过程:

public class FruitFactory extends AbstractFactory{
    @Override
    public <T extends Fruit> T createFruit(Class<T> c) {

        Fruit fruit = null;
        try {
            fruit = (T) Class.forName(c.getName()).getDeclaredConstructor().newInstance();
        }catch (Exception e){
            System.out.println("本工厂没有生产该品种的水果噢!");
            e.printStackTrace();
        }
        return (T)fruit;
    }
}

现在你又要进货了,那现在来看一下你最新的进货单吧!

public class Order {
    public static void main(String[] args) {
        System.out.println("你最新的进货单来啦");
        FruitFactory fruitFactory = new FruitFactory();
        Apple apple = fruitFactory.createFruit(Apple.class);
        System.out.println("老板,苹果已打包好!");
        Banana banana = fruitFactory.createFruit(Banana.class);
        System.out.println("老板,香蕉已打包好!");
        Orange orange = fruitFactory.createFruit(Orange.class);
        System.out.println("老板,橘子已打包好!");
        System.out.println("进货单如上");
    }
}

在这里插入图片描述
现在来看看我们的工厂构造:
在这里插入图片描述

下期预告

好啦,今天就到这,今天本店休息啦!
下一期预告:
苹果我想要进不同品种的!红富士、东北苹果…
香蕉我也要不同品种的!!!
橘子也要!!!
要不,再来点水蜜桃🍑🍑?🙋‍♀️🙋‍♀️🙋‍♀️

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是X大魔王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值