java设计模式之工厂方法模式
来源:互联网 发布:必发数据 下载 编辑:程序博客网 时间:2024/05/21 22:53
java设计模式参考文章:
Java设计模式实战,23种设计模式介绍以及在Java中的实现,Java设计模式, Java经典设计模式之五大创建型模式
简单工厂模式(静态工厂模式)
## 定义 ##
简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
## 代码举例 ##
// 抽象水果类public interface Fruit { void get();}// 具体水果类public class Apple implements Fruit { public void get() { System.out.println("采集苹果"); }}// 具体水果类2public class Banana implements Fruit { public void get() { System.out.println("采集香蕉"); }}// 工厂类public class FruitFactory { public static Fruit getFruit(String type) throws IllegalAccessException, InstantiationException, ClassNotFoundException { Class fruit = Class.forName(type); return (Fruit) fruit.newInstance(); }}
## 优点 ##
1. 隐藏了对象创建的细节,将产品的实例化过程放到了工厂中实现。 2. 客户端基本不用关心使用的是哪个产品,只需要知道用工厂的那个方法(或传入什么参数)就行了. 3. 方便添加新的产品子类,每次只需要修改工厂类传递的类型值就行了。 4. 遵循了依赖倒转原则。
## 缺点 ##
1. 适用于产品子类型差不多, 使用的方法名都相同的情况. 2. 每添加一个产品子类,都必须在工厂类中添加一个判断分支(或一个方法),这违背了OCP(开放-封闭原则)。
## 解析 ##
很容易看出,简单工厂模式是不易维护的,如果需要添加新的产品,则整个系统都需要修改。如果我们需要添加诸如梨子、葡萄等产品,直接在工程类中添加即可。但是如果这时候根部不知道还有什么产品,只有到子类实现时才知道,这时候就需要工厂方法模式。而在实际应用中,很可能产品是一个多层次的树状结构。由于简单工厂模式中只有一个工厂类来对应这些产品,所以实现起来是比较麻烦的,那么工厂方法模式正式解决这个问题的,下面就介绍工厂方法模式。
工厂方法模式
## 定义 ##
由于静态工厂方法模式不满足OCP, 因此就出现了工厂方法模式; 工厂方法模式和静态工厂模式最大的不同在于: 静态工厂模式只有一个(对于一个项目/独立模块)只有一个工厂类,而工厂方法模式则有一组实现了相同接口的工厂类.
## 代码举例 ##
// 产品接口public interface Fruit { void get();}// 产品工厂接口public interface FruitFactory { Fruit getFruit();}// 具体产品1public class Apple implements Fruit { public void get() { System.out.println("采集苹果"); }}// 具体产品工厂1public class AppleFactory implements FruitFactory { public Fruit getFruit() { return new Apple(); }}// 具体产品2public class Banana implements Fruit { public void get() { System.out.println("采集香蕉"); }}// 具体产品工厂2public class BananaFactory implements FruitFactory { public Fruit getFruit() { return new Banana(); }}
## 优点 ##
基本与静态工厂模式一致,多的一点优点就是遵循了开放-封闭原则,使得模式的灵活性更强。
## 缺点 ##
与静态工厂模式差不多, 但是增加了类组织的复杂性;
## 解析 ##
可以看一下工厂方法模式在collection集合的具体应用
抽象产品类派生出多个具体产品类;抽象工厂类派生出多个具体工厂类;每个具体工厂类只能创建一个具体产品类的实例。即定义一个创建对象的接口(即抽象工厂类),让其子类(具体工厂类)决定实例化哪一个类(具体产品类)。“一对一”的关系。与简单工厂间的取舍:工厂方法模式和简单工厂模式在定义上的不同是很明显的。工厂方法模式的核心是一个抽象工厂类,而不像简单工厂模式,把核心放在一个实类上。工厂方法模式可以允许很多实的工厂类从抽象工厂类继承下来,从而可以在实际上成为多个简单工厂模式的综合,从而推广了简单工厂模式。反过来讲,简单工厂模式是由工厂方法模式退化而来。设想如果我们非常确定一个系统只需要一个实的工厂类, 那么就不妨把抽象工厂类合并到实的工厂类中去。而这样一来,我们就退化到简单工厂模式了。可以看出工厂方法的加入,使得对象的数量成倍增长。当产品种类非常多时,会出现大量的与之对应的工厂对象,这不是我们所希望的。如果再分得详细一点,一个工厂可能不只是生产手机(如小米除了手机,连电饭锅都有),但有得工厂智能生成低端的产品,而大一点的工厂可能通常是生成更高端的产品。所以一个工厂是不够用了,这时,就应该使用抽象工厂来解决这个问题。
阅读全文
0 0
- JAVA设计模式之工厂模式之工厂方法模式
- Java设计模式之工厂方法模式
- Java设计模式之工厂方法模式
- java设计模式之工厂方法模式
- Java设计模式之工厂方法模式
- Java设计模式之工厂方法模式
- java设计模式之工厂方法模式
- Java设计模式之工厂方法模式
- Java设计模式之工厂方法模式
- Java设计模式之工厂方法模式
- 【Java设计模式】之工厂方法模式
- Java设计模式之工厂方法模式
- java设计模式之工厂方法模式
- Java设计模式之工厂方法模式
- java设计模式之"工厂方法模式"
- Java设计模式之工厂方法模式
- Java设计模式之工厂方法模式
- java之设计模式---工厂方法模式
- 在DPDK环境下搭建OpenvSwitch用户态运行环境
- tomcat挂掉自动启动tomcat
- 【Scikit-Learn 中文文档】神经网络模块(监督的)- 监督学习
- 频率域图像增强MATLAB实现
- Zabbix+grafana搭建MySQL监控平台
- java设计模式之工厂方法模式
- 第13周项目1-验证算法1
- Spring-Mybatis整合时,无法连接数据库,Cannot create PoolableConnectionFactory
- Android 双RecyclerView嵌套实现购物车逻辑
- 第十三周项目2
- 第十二周项目4Floyd算法验证
- flex
- 假设检验之几种检验方法的比较
- 【第九周】项目2-二叉树遍历的递归算法