简单工厂模式--java代码实现
简单工厂模式
工厂,生产产品的场所。比如农夫山泉工厂,生产农夫山泉矿泉水、茶π等饮料。矿泉水和茶π都属于饮料,都具有解渴的功能,但是每种饮料给人的感觉是不一样的。矿泉水和茶π在Java中相当于子类,饮料相当于父类。
简单工厂模式,又叫静态工厂模式,在Java中专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。我们将水果园比作一个工厂,可以生产苹果,香蕉等水果。每一个苹果或香蕉都是一个实例,他们的父类都是水果。
下面用Java语言实现简单工厂模式
1.简单工厂模式示意图
2.创建Fruit接口、Apple类和Banana类
Fruit(interface):
//水果类
public interface Fruit {
public void get();
}
Apple类:
//苹果类
public class Apple implements Fruit{
//实现并重写父类的get()方法
public void get() {
System.out.println("采集苹果");
}
}
Banana类:
//香蕉类
public class Banana implements Fruit{
//实现并重写父类的get()方法
public void get() {
System.out.println("采集香蕉");
}
}
3.创建水果园,即工厂类,来生产各种水果
FruitFactory:
注意:这里将工厂类和所创建的子类放在同一个包中,方便调用。
package simpleFactory;
//水果园,水果工厂类
public class FruitFactory {
/**
* @param 不同水果的类名称
* @return 水果类
*/
public static Fruit getFruit(String type) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
/*这里通过反射的方式获取到水果子类的字节码,即类对象,通过类对象的newInstance()方法创建水果子类
实例*/
Class fruit = Class.forName(FruitFactory.class.getPackage().getName()+"."+type);
return (Fruit) fruit.newInstance();
}
}
4.现在开始生产水果,创建实例,我们另外建立一个类
MainClass:
package simpleFactory; public class MainClass {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
//通过调用工厂类的静态方法getFruit,创建水果的子类实例。
Fruit apple = FruitFactory.getFruit("Apple");
Fruit banana = FruitFactory.getFruit("Banana");
apple.get();
banana.get();
}
}
5.结果:
6.总结:
模式来源于生活,简单工厂模式,是一种比较容易理解模式,这种模式在很多框架中都有应用,比如Spring框架中创建实例时,Mybatis中的SqlSessionFactory等。这里通过生活中简单实例,实现简单工厂模式。
参考B站视频https://www.bilibili.com/video/av34162848。
简单工厂模式--java代码实现的更多相关文章
- 简单工厂模式-Java篇
简单工厂模式就是考虑如何实例化对象的问题,就是说到底要实例化谁,将来会不会增加实例化对象,比如计算器类中增加开根元素,应该考虑用一个单独的类来创造实例的过程,这就是工厂.下面将利用计算器类举例,解释简 ...
- SimpleFactoryPattern(简单工厂模式)-----Java/.Net
工厂模式是最常用的一种创建型模式,通常所说的工厂模式一般是指工厂方法模式.本篇是是工厂方法模式的“小弟”,我们可以将其理解为工厂方法模式的预备知识,它不属于GoF 23种设计模式,但在软件开发中却也应 ...
- 抽象工厂模式--java代码实现
抽象工厂模式 抽象工厂模式,对方法工厂模式进行抽象.世界各地都有自己的水果园,我们将这些水果园抽象为一个水果园接口,在中国.英国和美国都有水果园,种植不同的水果,比如苹果.香蕉和梨等.这里将苹果进行抽 ...
- (1)java设计模式之简单工厂模式
一:简单工厂模式的优点 --->在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Fa ...
- JAVA基础——设计模式之简单工厂模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂 ...
- 设计模式之简单工厂模式(Simple Factory Pattern)
一.简单工厂模式的由来 所有设计模式都是为解决某类问题而产生的,那么简单工厂模式是为解决什么问题呢?我们假设有以下业务场景: 在一个学生选课系统中,文科生用户选课时,我们要获得文科生的所有课程列表:理 ...
- iOS 简单工厂模式
iOS 简单工厂模式 什么是简单工厂模式? 简单工厂模式中定义一个抽象类,抽象类中声明公共的特征及属性,抽象子类继承自抽象类,去实现具体的操作.工厂类根据外界需求,在工厂类中创建对应的抽象子类实例并传 ...
- 创建型模式(过渡模式) 简单工厂模式(Simple Factory)
简单工厂模式(Simple Factory Pattern)属于类的创建型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern) 是通过专门定义一个类来负责创建其他类的 ...
- PHP面向对象-设计模式 单例模式 简单工厂模式 工厂方法模式
1.单例模式 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中一个类只有一个实例.即一个类只有一个对象实例. 要实现每一个类只有一个实例,就需 ...
随机推荐
- git push The requested URL returned error: 403 Forbidden while accessing
错误提示信息: error: The requested URL returned error: Forbidden while accessing https://github.com/xingfu ...
- Ubuntu 18.04 启动root账号并授权远程登录
Ubuntu 18.04 刚刚上市2个月,下载安装,尝尝鲜~ 安装界面看上去舒服许多, 安装的速度也较之前17.04 和16.04 都快了许多.抱歉,未截图. Ubuntu 安装完成后默认不启动roo ...
- 用Python+qrcode库创建一个包含信息的二维码
安装qrcode库和PIL库 在命令行中分别输入pip install qrcode 和pip install pillow 导入库格式如下: import PIL import qrcode 下面以 ...
- js万年历,麻雀虽小五脏俱全,由原生js编写
对于前端来说,我们可能见到最多的就是各种各样的框架,各种各样的插件了,有各种各样的功能,比如轮播啊,日历啊,给我们提供了很大的方便,但是呢?我们在用别人这些写好的插件,框架的时候,有没有试着问一问自己 ...
- CSS弹性盒子的基本用法
.container { width: 302px; height: 302px; border: 1px solid; display: flex } .item { width: 100px; h ...
- mint-ui之picker爬坑记
picker的数据来源为动态获取时,数据无法正常渲染!因为方法不对,所以坑大了!深刻地体会到'业不精,我之过',谨以此文,深刻地记录一下踩坑及爬坑的整个过程,以便日后不再入坑,也给后来者提供一下参考 ...
- oracle通用函数,nvl,nvl2,NULLIF ,coalesce
Oracle 通用函数 ① NVL 函数--------将空值转换成一个已知的值: 可以使用的数据类型有日期.字符.数字. 函数的一般形式: NVL(commission_pct,0) ...
- Tomcat配置与优化(内存、并发、管理)与性能监控
原文链接:http://blog.csdn.net/xyang81/article/details/51530979 一.JVM内存配置优化 在开发当中,当一个项目比较大时,依赖的jar包通常比较多, ...
- Docker的安装和测试
1,Docker安装 Docker是啥,以及其与虚拟机的对比,就不介绍了,网上有很多资源可以学习和了解. 本篇文章重点介绍Docker的安装和测试使用. Docker的安装,分为离线安装和在线安装两种 ...
- 关于js中循环遍历中顺序执行多个嵌套ajax的问题
就是业务上需要完成一个功能,这个功能需要依次调用四个接口,后面接口的参数都依赖于前一个接口的返回值. 类似这样: var objArr = "从其他逻辑获得"; for(var n ...