首页 > 其他 > 详细

[design pattern](4) SImple Factory

时间:2019-08-21 19:07:50      阅读:91      评论:0      收藏:0      [点我收藏+]

前言

本博客主要介绍简单工厂模式(Simple Factory),简单工厂模式是创建型模式的一员,也是我们平时coding用到的比较多的一个模式了。

思考题

首先,让我们思考以下的需求:

博主,突然很想吃宫保鸡丁和西红柿炒鸡蛋,那么博主的需求怎样才能得到满足呢?

 

当我们没有修炼过 简单工厂模式 这本秘籍,我会自己动手做:

首先我会上百度搜索到制作那两个菜的方法:

KungPaoChicken.java:

public class KungPaoChicken {
    private String name = "宫保鸡丁";

    @Override
    public String toString() {
        return name;
    }
}

 

TomatoEgg.java

public class TomatoEgg {
    private String name = "西红柿炒鸡蛋";

    @Override
    public String toString() {
        return name;
    }
}

 

然后我开始制作这两个菜:

Custom.java

public class Custom {
    public static void main(String... args) {
        KungPaoChicken kungPaoChicken = new KungPaoChicken();
        TomatoEgg tomatoEgg = new TomatoEgg();

        System.out.println(kungPaoChicken);
        System.out.println(tomatoEgg);
    }
}

 

所有的东西都是我们自己去操作。

下面我们给出了上面的代码的uml类图:

技术分享图片

简单工厂模式(Simple Factory)

定义:提供一个创建对象实例的功能,而无需用户自己去创建,无需关注具体实现。

类图:

技术分享图片

 

上面的类途中一共有三个角色:

  • 抽象产品(Product):负责抽象出一类产品的行为,所有的产品都需要实现这个行为,使工厂可以使用这个类来引用子类的实例。
  • 工厂(Factory):负责实例化产品,并返回父类的引用给用户。将用户和产品的具体实现分离。
  • 具体产品(Concrete):产品的具体实现,不同的产品有不同的实现,但是他们都要继承抽象产品。

重构思考

通过简单工厂的学习,博主突然想去开一个饭店,这样顾客只需要付钱并且点菜就可以吃到想吃的菜了,想想是不是很方便。

首先,我们需要一个 抽象产品 :

Food.java:

public interface Food {
    void eat();
}

 

然后, 具体的产品 :

KungPaoChicken.java:

public class KungPaoChicken implements Food {
    @Override
    public void eat() {
        System.out.println("吃宫保鸡丁");
    }
}

 

TomatoEgg.java:

public class TomatoEgg implements Food {
    @Override
    public void eat() {
        System.out.println("吃西红柿");
    }
}

 

最后,我们创建工厂:

MyHotal.java:

public class MyHotal {
    public Food createFood(String foodName) {
        switch(foodName) {
        case "KungPaoChicken":
            return new KungPaoChicken();
        case "TomatoEgg":
            return new TomatoEgg();
        default:
            return null;
    }
    }
}

 

 

那么我们来测试一下:

Custom.java:

public class Custom {
    public static void main(String ...args) {
        MyHotal myHotal = new MyHotal();
    Food kungPaoChicken = myHotal.createFood("KungPaoChicken");
    Food tomatoEgg = myHotal.createFood("TomatoEgg");

    kungPaoChicken.eat();
    tomatoEgg.eat();
    }
}

 

[design pattern](4) SImple Factory

原文:https://www.cnblogs.com/cafebabe-yun/p/11390426.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!