zoukankan      html  css  js  c++  java
  • [design pattern](4) SImple Factory

    前言

    本博客主要介绍简单工厂模式(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();
        }
    }
  • 相关阅读:
    MySQL8安装及使用当中的一些注意事项
    设计模式-观察者模式
    在线教育项目-day12【完善后端整合前端】
    在线教育项目-day12【微信扫码登录】
    在线教育项目-day12【OAuth2】
    在线教育项目-day12【完善登陆页面】
    在线教育项目-day12【整合前端登陆注册页面(2)】
    在线教育项目-day12【整合前端登陆注册页面(1)】
    在线教育项目-day12【解析oken信息】
    在线教育项目-day12【注册接口】
  • 原文地址:https://www.cnblogs.com/cafebabe-yun/p/11390426.html
Copyright © 2011-2022 走看看