《JAVA设计模式》之简单工厂模式
来源:互联网 发布:windows 结束进程命令 编辑:程序博客网 时间:2024/05/21 09:50
一.简单工厂模式简介
- 是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一
- 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例
- 简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现
其实对于简单工厂模式的UML的图结构如下图所示:
其实我们遇到的情况抽象到具体往往都会不止一层,而是多层,其实这个也是和上面UML图中情况如法炮制,理解了上面这个,这个就不成问题了。下面我们就来举例介绍介绍简单工厂模式的实现。
二.简单工厂模式实现
我们可以举个例子,就以下面的UML图中来写代码了
结构如下:
接口:
public interface Fruits { public void get();}
苹果类:
public class Apple implements Fruits{ @Override public void get() { System.out.println("我要吃一个苹果"); }}
梨子类:
public class Pear implements Fruits{ @Override public void get() { System.out.println("我要吃一个梨子"); }}
橙子类:
public class Orange implements Fruits{ @Override public void get() { System.out.println("我要吃一个橙子"); }}
工厂类:
public class FruitsFactory { public static Fruits getFruits(String type) throws InstantiationException, IllegalAccessException{ if(type.equals("Apple")){ return Apple.class.newInstance(); } else if(type.equals("Pear")) { return Pear.class.newInstance(); } else if(type.equals("Orange")) { return Orange.class.newInstance(); }else { System.out.println("对不起,找不到你要的"+type+"产品"); return null; } }}
测试类:
public class TestDemo { public static void main(String[] args) throws InstantiationException, IllegalAccessException { Fruits apple=FruitsFactory.getFruits("Apple"); Fruits pear=FruitsFactory.getFruits("Pear"); Fruits orange=FruitsFactory.getFruits("Orange"); Fruits f1=FruitsFactory.getFruits("f1"); if(apple!=null) { apple.get(); } if(pear!=null) { pear.get(); } if(orange!=null) { orange.get(); } if(f1!=null) { f1.get(); } }}
运行效果:
简单工厂模式的优点:
工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。
简单共产模式的缺点:
由于工厂类集中了所有实例的创建逻辑,这就直接导致一旦这个工厂出了问题,所有的客户端都会受到牵连;而且由于简单工厂模式的产品室基于一个共同的抽象类或者接口,这样一来,但产品的种类增加的时候,即有不同的产品接口或者抽象类的时候,工厂类就需要判断何时创建何种种类的产品,这就和创建何种种类产品的产品相互混淆在了一起,违背了单一职责,导致系统丧失灵活性和可维护性。而且更重要的是,简单工厂模式违背了”开放封闭原则”,就是违背了”系统对扩展开放,对修改关闭”的原则,因为当我新增加一个产品的时候必须修改工厂类,相应的工厂类就需要重新编译一遍。
END!!!!!!!!!!!!!!!!!!!!
2 0
- JAVA设计模式之工厂模式之简单工厂模式
- java设计模式之简单工厂模式
- java设计模式之简单工厂模式
- java设计模式之简单工厂模式
- java设计模式之简单工厂模式
- java设计模式之简单工厂模式
- Java设计模式之简单工厂模式
- 【Java设计模式】之简单工厂模式
- Java--设计模式之简单工厂模式
- java设计模式之简单工厂模式
- Java设计模式之简单工厂模式
- java设计模式之简单工厂模式
- Java设计模式之简单工厂模式
- Java设计模式之简单工厂模式
- Java设计模式之“简单工厂模式”
- Java设计模式之简单工厂模式
- JAVA设计模式之------简单工厂模式
- java设计模式之简单工厂模式
- 日处理20亿数据,实时用户行为服务系统架构实践
- java 多态
- PCB布线中的地线干扰分析与抑制方法
- 【Java Utility】Jsoup网页爬虫工具简介Java HTML PARSER【一】
- win系统下清除MYSQL服务的命令
- 《JAVA设计模式》之简单工厂模式
- 如何在codewarrior中的flashprogrammer添加新的flash型号
- mysql 查看数据库中所有表的记录数
- TALOS组件化平台搭建总结
- 使用了框架iframe的页面如何跳出框架
- python库的安装
- Mac编译android源码
- PHP二维数组的相关方法
- mysql 批量插入数据优化