设计模式-简单工厂模式(SimpleFactory)
2024-09-01 00:16:29
简单工厂模式又叫静态工厂模式,,通过定义一个类(FruitFactory)来负责创建其他类的实例,被创建的实例通常都具有相同的父类(Fruit)。
角色和职责:
1.工厂角色(Factory)-FruitFactory:
简单工厂模式的核心。它负责创建所有实例的内部逻辑,工厂类可以被外界直接调用,创建所需的产品对象。
2.抽象产品(Product)-Fruit:
简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
3.具体产品(concrete product)-Banana、Apple:
简单工厂模式所创建的具体实例对象
UML图:
具体代码:
/**
* 水果接口类
*/
public interface Fruit {
public void pick();
}
/**
* 苹果实现类
*/
public class Apple implements Fruit{ @Override
public void pick() {
System.out.println("采摘苹果");
}
}
/**
* 香蕉实现类
*/
public class Banana implements Fruit{
@Override
public void pick() {
System.out.println("采摘香蕉");
}
}
/**
* 水果生产类
*/
public class FruitFactory { public static Fruit getFruit(String fruitName) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
//原简单工厂模式写法
// if(fruitName.equalsIgnoreCase("apple")){
// return new Apple();
// }else if(fruitName.equalsIgnoreCase("banana")){
// return new Banana();
// }
// return null;
//简单工厂模式优化后的代码如下:
Class cls = Class.forName(fruitName);
return (Fruit) cls.newInstance();
}
}
public class Main {
public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
Fruit apple = FruitFactory.getFruit("Apple");//生产苹果
Fruit banana = FruitFactory.getFruit("Banana");//生产香蕉
apple.pick();
banana.pick();
}
}
结果:
采摘苹果
采摘香蕉
优缺点:
优:在这个模式下,工厂类(FruitFactory)是整个模式的核心,根据外界给定的信息,决定用哪个具体类对象。
缺:高内聚,扩展性差,多一个水果时,需要去创建。
项目源码:https://github.com/qjm201000/design_pattern_simpleFactory.git
最新文章
- Spark难道比oracle性能还差?百万级数据测试性能
- string int 转换
- INFORMATICA 的部署实施之 BACKUP&;RESTORE
- 【云计算】开源的Docker Registry WebUI
- 第十篇 Replication:故障排除
- 教程-for do、while do 中循环退出
- -exec和|xargs
- html中静态进度条的实现
- Win10微软帐户切换不回Administrator本地帐户的解决方法--(转,虽转但亲测有效)
- android studio中使用lambda
- 重写TreeView模板来实现数据分层展示(二)
- Java WebSocket实现网络聊天室(群聊+私聊)
- WebSocket 时时双向数据,前后端(聊天室)
- Java学习笔记八(反射)
- 【Linux】利用Xvfb关闭chrome的图形化输出
- mysql-5.6.17-win32安装
- VLC在web系统中应用(x-vlc-plugin 即如何把VLC嵌入HTML中)第一篇
- 使border处于边框内
- 银行业务-Excel文件的拆分逻辑
- (转载)iPhone开发视频教程 Objective-C部分 (51课时)
热门文章
- uva 1436 - Counting heaps(算)
- 第一个spring boot工程
- DirectX 图形流水线
- PostSharp-5.0.26安装包_KeyGen发布_支持VS2017
- SICP 1.6-1.8
- delphi中使用词霸2005的动态库XdictGrb.dll实现屏幕取词
- ARC forbids explicit message send of'retain'解决办法
- Win8Metro(C#)数字图像处理--2.10图像中值滤波
- UWP项目生成错误: 未能使用“CompileXaml”任务的输入参数初始化该任务。“CompileXaml”任务不支持“PlatformXmlDir”参数。请确认该参数存在于此任务中,并且是可设置的公共实例属性。
- Android源码中编译出指定jar包