简单工厂模式

  工厂,生产产品的场所。比如农夫山泉工厂,生产农夫山泉矿泉水、茶π等饮料。矿泉水和茶π都属于饮料,都具有解渴的功能,但是每种饮料给人的感觉是不一样的。矿泉水和茶π在Java中相当于子类,饮料相当于父类。

  简单工厂模式,又叫静态工厂模式,在Java中专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。我们将水果园比作一个工厂,可以生产苹果,香蕉等水果。每一个苹果或香蕉都是一个实例,他们的父类都是水果。

  下面用Java语言实现简单工厂模式

1.简单工厂模式示意图

2.创建Fruit接口、Apple类和Banana类

Fruit(interface):

  1. //水果类
  2. public interface Fruit {
  3. public void get();
  4. }

Apple类:

  1. //苹果类
  2. public class Apple implements Fruit{
  3. //实现并重写父类的get()方法
  4. public void get() {
  5. System.out.println("采集苹果");
  6. }
  7. }

Banana类:

  1. //香蕉类
  2. public class Banana implements Fruit{
  3. //实现并重写父类的get()方法
  4. public void get() {
  5. System.out.println("采集香蕉");
  6. }
  7. }

3.创建水果园,即工厂类,来生产各种水果

FruitFactory:

注意:这里将工厂类和所创建的子类放在同一个包中,方便调用。

  1. package simpleFactory;
  2. //水果园,水果工厂类
  3. public class FruitFactory {
  4. /**
  5. * @param 不同水果的类名称
  6. * @return 水果类
  7. */
  8. public static Fruit getFruit(String type) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
  9. /*这里通过反射的方式获取到水果子类的字节码,即类对象,通过类对象的newInstance()方法创建水果子类
  10. 实例*/
  11. Class fruit = Class.forName(FruitFactory.class.getPackage().getName()+"."+type);
  12. return (Fruit) fruit.newInstance();
  13. }
  14. }

4.现在开始生产水果,创建实例,我们另外建立一个类

MainClass:

  1. package simpleFactory;
  2.  
  3. public class MainClass {
  4. public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
  5. //通过调用工厂类的静态方法getFruit,创建水果的子类实例。
  6. Fruit apple = FruitFactory.getFruit("Apple");
  7. Fruit banana = FruitFactory.getFruit("Banana");
  8. apple.get();
  9. banana.get();
  10. }
  11. }

5.结果:

6.总结:

  模式来源于生活,简单工厂模式,是一种比较容易理解模式,这种模式在很多框架中都有应用,比如Spring框架中创建实例时,Mybatis中的SqlSessionFactory等。这里通过生活中简单实例,实现简单工厂模式。

  参考B站视频https://www.bilibili.com/video/av34162848

简单工厂模式--java代码实现的更多相关文章

  1. 简单工厂模式-Java篇

    简单工厂模式就是考虑如何实例化对象的问题,就是说到底要实例化谁,将来会不会增加实例化对象,比如计算器类中增加开根元素,应该考虑用一个单独的类来创造实例的过程,这就是工厂.下面将利用计算器类举例,解释简 ...

  2. SimpleFactoryPattern(简单工厂模式)-----Java/.Net

    工厂模式是最常用的一种创建型模式,通常所说的工厂模式一般是指工厂方法模式.本篇是是工厂方法模式的“小弟”,我们可以将其理解为工厂方法模式的预备知识,它不属于GoF 23种设计模式,但在软件开发中却也应 ...

  3. 抽象工厂模式--java代码实现

    抽象工厂模式 抽象工厂模式,对方法工厂模式进行抽象.世界各地都有自己的水果园,我们将这些水果园抽象为一个水果园接口,在中国.英国和美国都有水果园,种植不同的水果,比如苹果.香蕉和梨等.这里将苹果进行抽 ...

  4. (1)java设计模式之简单工厂模式

    一:简单工厂模式的优点          --->在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Fa ...

  5. JAVA基础——设计模式之简单工厂模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂 ...

  6. 设计模式之简单工厂模式(Simple Factory Pattern)

    一.简单工厂模式的由来 所有设计模式都是为解决某类问题而产生的,那么简单工厂模式是为解决什么问题呢?我们假设有以下业务场景: 在一个学生选课系统中,文科生用户选课时,我们要获得文科生的所有课程列表:理 ...

  7. iOS 简单工厂模式

    iOS 简单工厂模式 什么是简单工厂模式? 简单工厂模式中定义一个抽象类,抽象类中声明公共的特征及属性,抽象子类继承自抽象类,去实现具体的操作.工厂类根据外界需求,在工厂类中创建对应的抽象子类实例并传 ...

  8. 创建型模式(过渡模式) 简单工厂模式(Simple Factory)

    简单工厂模式(Simple Factory Pattern)属于类的创建型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern) 是通过专门定义一个类来负责创建其他类的 ...

  9. PHP面向对象-设计模式 单例模式 简单工厂模式 工厂方法模式

    1.单例模式 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例.即一个类只有一个对象实例. 要实现每一个类只有一个实例,就需 ...

随机推荐

  1. Roundcube 1.2.2 - Remote Code Execution

    本文简要记述一下Roundcube 1.2.2远程代码执行漏洞的复现过程. 漏洞利用条件 Roundcube必须配置成使用PHP的mail()函数(如果没有指定SMTP,则是默认开启) PHP的mai ...

  2. es6(一):es6介绍以及let,const

    es是js的规范,而js是具体实现 将es6转化为es5代码工具:运用的多的是babel 在线转换地址:babel,traceur(属于谷歌)   1.let申明变量:let其实可以完全取代var,并 ...

  3. JDK AtomicInteger 源码分析

    @(JDK)[AtomicInteger] JDK AtomicInteger 源码分析 Unsafe 实例化 Unsafe在创建实例的时候,不能仅仅通过new Unsafe()或者Unsafe.ge ...

  4. 专业、稳定的微信域名被封检测API平台!

    裂变程序最佳配套api,实时检测域名在微信中是否被封,防止见红  还在手动测试域名在微信是否可用?你OUT了! API文档:最简单的GET接口调用方式 API响应:毫秒级响应效率,100%准确率 AP ...

  5. Unity pdb2mdb错误

    错误: D:\sandbox\sandbox_art\sandbox_artprj\Assets\Plugins\Sandbox\Editor>"C:\ProgramFiles/Uni ...

  6. 有终将被编程潮流淹没的程序员,那是因为没学python人工智能吧?

    2017年被称为中国人工智能元年--在两会时期,人工智能曾经成为国度计策,同时被写进当局报告.在从前的一年里,人工智能获得注重,已逐步浸透到别的行业,无人超市.主动驾驶.人脸识别.智能家居等" ...

  7. TensorFlow图像处理API

    TensorFlow提供了一些常用的图像处理接口,可以让我们方便的对图像数据进行操作,以下首先给出一段显示原始图片的代码,然后在此基础上,实践TensorFlow的不同API. 显示原始图片 impo ...

  8. 并查集(union-find set)与Kruskal算法

    并查集 并查集处理的是集合之间的关系,即‘union' , 'find' .在这种数据类型中,N个不同元素被分成若干个组,每组是一个集合,这种集合叫做分离集合.并查集支持查找一个元素所属的集合和两个元 ...

  9. PAT1004:Counting Leaves

    1004. Counting Leaves (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A fam ...

  10. 对于Javascript 执行上下文的理解

    转载无源头地址 在这篇文章中,将比较深入地阐述下执行上下文 – JavaScript中最基础也是最重要的一个概念.相信读完这篇文章后,你就会明白javascript引擎内部在执行代码以前到底做了些什么 ...