Java设计模式 -- 简单工厂模式(SimpleFactory)
一、什么是简单工厂模式
简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
二、模式中包含的角色及其职责
1.工厂(Creator)角色简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
2.抽象(Product)角色简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
3.具体产品(Concrete Product)角色简单工厂模式所创建的具体实例对象
三、具体实例
现在有两个类,分别是Apple和Banana,都有一个Get方法:
Apple.java
package cc.dewdrop;public class Apple{public void get(){System.out.println("采集苹果");}
}
Banana.java
package cc.dewdrop;public class Banana{public void get(){System.out.println("采集香蕉");}
}
在主方法中实例化并分别调用个体方法:
package cc.dewdrop;public class SimpleFactory {public static void main(String[] args) {Apple apple = new Apple();Banana banana = new Banana();apple.get();banana.get();}
}
发现两个类都有一个共同的get方法,那么我们就可以抽象出一个接口,然后Apple和Banana两个类分别实现这个接口:
Fruit.java
package cc.dewdrop;public interface Fruit {public void get();
}
Apple.java
package cc.dewdrop;public class Apple implements Fruit{public void get(){System.out.println("采集苹果");}
}
Banana.java
package cc.dewdrop;public class Banana implements Fruit{public void get(){System.out.println("采集香蕉");}
}
在主方法中就可以使用下面这种方式来创建对象:
public class SimpleFactory {public static void main(String[] args) {Fruit apple = new Apple();Fruit banana = new Banana();apple.get();banana.get();}
}
根据简单工厂模式的特点,现在就需要创建一个类来创建类的对象:
FruitFactory.java
package cc.dewdrop;public class FruitFactory {/*** 获得Apple实例*/public Fruit getApple() {return new Apple();}/*** 获得Banana实例*/public Fruit getBanana() {return new Banana();}
}
在主方法中就可以使用如下方式进行调用:
public class SimpleFactory {public static void main(String[] args) {Fruit apple = new FruitFactory().getApple();Fruit banana = new FruitFactory().getBanana();apple.get();banana.get();}
}
再进一步,我们可以修改工厂类,使用静态方法来创建对象:
FruitFactory.java
package cc.dewdrop;public class FruitFactory {/*** 获得Apple实例*/public static Fruit getApple() {return new Apple();}/*** 获得Banana实例*/public static Fruit getBanana() {return new Banana();}
}
在主方法中就可以直接使用类名来调用:
public class SimpleFactory {public static void main(String[] args) {Fruit apple = FruitFactory.getApple();Fruit banana = FruitFactory.getBanana();apple.get();banana.get();}
}
进一步改进工厂类,希望有一个公用的方法来创建所有产品的对象:
FruitFactory.java
package cc.dewdrop;public class FruitFactory {public static Fruit getFruit(String type) throws InstantiationException, IllegalAccessException {if (type.equalsIgnoreCase("apple")) {return Apple.class.newInstance();} else if (type.equalsIgnoreCase("banana")) {return Banana.class.newInstance();} else {System.out.println("class not found");}return null;}
}
在主方法中使用如下方式调用:
public class SimpleFactory {public static void main(String[] args) {Fruit apple = FruitFactory.getFruit("apple");Fruit banana = FruitFactory.getFruit("banana");apple.get();banana.get();}
}
这样调用工厂类创建对象的操作就简化了很多,但是还有一个缺点,就是如果在新增加一个类是,就必须修改工厂类。那么此时工厂类可以做出如下修改:
FruitFactory.java
package cc.dewdrop;public class FruitFactory {public static Fruit getFruit(String type)throws InstantiationException, IllegalAccessException, ClassNotFoundException {return (Fruit) Class.forName(type).newInstance();}
}
需要注意一点的是,在调用的时候需要使用类的完整路径(包括包名):
public class SimpleFactory {public static void main(String[] args) {Fruit apple = FruitFactory.getFruit("cc.dewdrop.Apple");Fruit banana = FruitFactory.getFruit("cc.dewdrop.Banana");apple.get();banana.get();}
}
四、简单工厂模式的优缺点
在这个模式中,工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化
不难发现,简单工厂模式的缺点也正体现在其工厂类上,由于工厂类集中了所有实例的创建逻辑,所以“高内聚”方面做的并不好。另外,当系统中的具体产品类不断增多时,可能会出现要求工厂类也要做相应的修改,扩展性并不很好。
转载于:https://www.cnblogs.com/zhangtingkuo/p/4715283.html
Java设计模式 -- 简单工厂模式(SimpleFactory)相关推荐
- 轻松看懂java设计模式简单工厂模式
点击上方"好好学java",选择"置顶公众号" 优秀学习资源.干货第一时间送达! 精彩内容 java实战练习项目教程 2018微服务资源springboot.s ...
- 解读设计模式----简单工厂模式(SimpleFactory Pattern),你要什么我就给你什么
本文首发于博客园,地址:http://www.cnblogs.com/beniao/archive/2008/08/09/1263318.html 一.模式概述 从设计模式的类型上来说,简单工厂模式是 ...
- java设计模式--简单工厂模式
1.概念:建立一个工厂(一个函数或一个类方法)来制造新的对象,简单工厂模式静态工厂方法模式,存在的目的很简单:定义一个用于创建对象的接口. (注意点:简单工厂模式的方法是静态的) 2.组成: 1) 工 ...
- Java——设计模式(简单工厂模式)
* A:简单工厂模式概述* 简单工厂模式又叫静态工厂方法模式,它定义了一个具体的工厂类负责创建一些类的实例* B:优点* 客户端不需要再负责对象的创建,从而明确了各个类的职责* 简单来说,客户端你只需 ...
- java设计模式-简单工厂模式
1.实例化对象不需要new,用工厂模式 2.工厂模式分为(简单工厂模式,工厂方法模式,抽象工厂模式) package com.wuming.factory.simple;public interfac ...
- Java设计模式之 工厂模式(简单工厂模式)
前一阵子学习了Java 中据说是最简单的设计模式的 单例模式,想一起讨论学习的小伙伴请点击这里: Java 设计模式之单例模式 那么今天就把学习的工厂模式记录下来 工厂模式: 实现了创建者和调用者的分 ...
- java设计模式之工厂模式(UML类图分析+代码详解)
大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...
- Java设计模式(工厂模式>抽象工厂模式和原型模式)
Java设计模式Ⅱ 1.工厂模式 1.1 简单工厂模式 1.2 工厂方法模式 2.抽象工厂模式 3.总结 4.原型模式 4.1 原型模式 4.2 浅拷贝 4.3 深拷贝 5.建造者模式 1.工厂模式 ...
- 三角形圆形创建与擦除java_设计模式---------------简单工厂模式
设计模式---------------简单工厂模式 一.题目(Question) 使用简单工厂模式设计一个可以创建不同几何形状(如圆形.方形和三角形等)的绘图工具,每个几何图形都要有绘制draw()和 ...
最新文章
- 因热爱而编码,创造至美生活,挑战高效工作 阿里云智能开发者创新应用大赛全记录...
- [Oracle PL/SQL]当数据表设计成具有父ID的时候,当需要选择所有与父ID同根生的所有节点的时候,使用的SQL语句...
- 16、ASP.NET MVC入门到精通——MVC过滤器
- linux shell脚本 wget,bash – 在shell脚本中运行wget和其他命令
- 11没有源码注释_我们为什么要看源码、应该如何看源码?
- Pygal简介、画廊--各种图形绘图代码
- java_security之base64原理解析以及三种代码的实现方式
- ReactNative入门之android与rn初始化参数的传递
- 描述C,C++编译和链接过程
- MFC使用ODBC连接SQL Server 2008数据库编程
- 磁力计椭球拟合使用篇 IMU 加速度、电子罗盘校准
- AutoCAD2010安装教程
- Android使用LAME Mp3编码
- 计算机桌面锁屏设置,怎么设置电脑锁屏
- Voxelization 三维模型体素化
- error C4189
- NX二次开发-UFUN获取工程图所有视图tag UF_DRAW_ask_views
- Axios源码深度剖析
- Pytorch阅读文档之flatten函数
- java 车牌号验证正则表达式_车牌号校验正则表达式
热门文章
- python判断对错题_python 初学者错题本
- 炸了,为什么某高速网络总是二层通三层不通?
- 100+人的企业IP怎么进行安全配置 ?
- java西游记壹_岩浆数码再现手机RPG游戏--西游记壹
- 阿里云 MSE 云原生网关助力斯凯奇轻松应对双 11 大促
- 消息队列RocketMQ应对双十一流量洪峰的“六大武器”
- 阿里云入选 2021 Gartner APM 魔力象限,国内唯一入选云厂商
- Delphi XE 10.4 FMX ListView 一个不易察觉的 BUG
- 使用opengl编程实现一个三维渲染实体_Unity Shader学习随记_01_渲染流水线
- 实体类dao接口mysql_利用MyBatis生成器自动生成实体类、DAO接口和Mapping映射文件...