简单工厂模式又叫静态工厂模式,,通过定义一个类(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

最新文章

  1. Spark难道比oracle性能还差?百万级数据测试性能
  2. string int 转换
  3. INFORMATICA 的部署实施之 BACKUP&RESTORE
  4. 【云计算】开源的Docker Registry WebUI
  5. 第十篇 Replication:故障排除
  6. 教程-for do、while do 中循环退出
  7. -exec和|xargs
  8. html中静态进度条的实现
  9. Win10微软帐户切换不回Administrator本地帐户的解决方法--(转,虽转但亲测有效)
  10. android studio中使用lambda
  11. 重写TreeView模板来实现数据分层展示(二)
  12. Java WebSocket实现网络聊天室(群聊+私聊)
  13. WebSocket 时时双向数据,前后端(聊天室)
  14. Java学习笔记八(反射)
  15. 【Linux】利用Xvfb关闭chrome的图形化输出
  16. mysql-5.6.17-win32安装
  17. VLC在web系统中应用(x-vlc-plugin 即如何把VLC嵌入HTML中)第一篇
  18. 使border处于边框内
  19. 银行业务-Excel文件的拆分逻辑
  20. (转载)iPhone开发视频教程 Objective-C部分 (51课时)

热门文章

  1. uva 1436 - Counting heaps(算)
  2. 第一个spring boot工程
  3. DirectX 图形流水线
  4. PostSharp-5.0.26安装包_KeyGen发布_支持VS2017
  5. SICP 1.6-1.8
  6. delphi中使用词霸2005的动态库XdictGrb.dll实现屏幕取词
  7. ARC forbids explicit message send of'retain'解决办法
  8. Win8Metro(C#)数字图像处理--2.10图像中值滤波
  9. UWP项目生成错误: 未能使用“CompileXaml”任务的输入参数初始化该任务。“CompileXaml”任务不支持“PlatformXmlDir”参数。请确认该参数存在于此任务中,并且是可设置的公共实例属性。
  10. Android源码中编译出指定jar包