今天在学习工厂模式,从最简单的简单工厂模式开始。

我们现在需要通过工厂Factory生产A,B两款产品(都是产品,实现了接口Product)。

产品A:

public class A implements Product {

    public A() {
System.err.println("生产了产品A");
} }

产品B:

public class B implements Product {

    public B() {
System.err.println("生产了产品B");
} }

A,B实现的接口Product:

public interface Product {

}

接下来就是我们用来实例化A,B的工厂类:

public class Factory {
public Product create(int i) throws Exception {
switch (i) {
case 1:
return new A();
case 2:
return new B();
default:
throw new Exception("没有该产品。");
}
} public static void main(String[] args) throws Exception {
Factory f=new Factory();
f.create(1);
f.create(2);
f.create(3);
}
}

简单工厂中只有一个工厂,这个工厂可以接收参数,并根据参数来决定返回什么样的实体。所有创建的工作都由该工厂完成。

简单工厂有一个不方便的地方在于,当我们需要需要新增一种产品,比如产品C,这时候我们不仅需要新建C的实体类,还需要修改工厂类的方法。如果需要生产的产品足够多,我们工厂类则会显得十分复杂,各种判断。

这时候我们就思考了,可不可以让一个工厂只生产一种产品呢,这样工厂类内部就简单了。

如下,我们先定义一个借口Product,所有可以生产产品的工厂类都要实现这个接口。

/**
* <p>
*
* 工厂类接口
* </p>
*
* @author wangchao
*
* @version 1.0.0
*
* @since 1.0.0
*
*/
public interface FactoryInterface {
//创建方法
public Product create();
}

实现了这个接口的工厂:

/**
* <p>
* 工厂A,专门负责生产A类产品
* </p>
*
* @author wangchao
*
* @version 1.0.0
*
* @since 1.0.0
*
*/
public class FactoryA implements FactoryInterface { @Override
public Product create() {return new A();
} }
/**
* <p>
* 工厂B,专门负责生产B类产品
* </p>
*
* @author wangchao
*
* @version 1.0.0
*
* @since 1.0.0
*
*/
public class FactoryB implements FactoryInterface { public Product create() {
return new B();
} }

这样的话,每一个工厂的实现就非常简单了。但是这样还是有一个问题,我们需要为为一个产品创建一个工厂,如果我们的产品足够多,我们就得创建足够的工厂,这样肯定不是我们想要的。

我们需要一个更加抽象的工厂,来实现有共同属性的产品的生产。

比如,现在我们现在对A产品要生产两个型号:A-1、A-2,B产品也需要生产两个型号:B-1、B-2。如果按照上面的工厂方法,我们需要写四个

java模式-工厂模式的更多相关文章

  1. !!转!!java 简单工厂模式

    举两个例子以快速明白Java中的简单工厂模式: 女娲抟土造人话说:“天地开辟,未有人民,女娲抟土为人.”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的思想里面.女娲造人,这就是 ...

  2. 一张图搞定Java设计模式——工厂模式! 就问你要不要学!

    小编今天分享的内容是Java设计模式之工厂模式. 收藏之前,务必点个赞,这对小编能否在头条继续给大家分享Java的知识很重要,谢谢!文末有投票,你想了解Java的哪一部分内容,请反馈给我. 获取学习资 ...

  3. Java基础——工厂模式

    通过学习,一句话概括Java工厂模式的特点——通过建立一个工厂来创建对象,不必关心构造对象实例能不能被实例化啊等诸多细节和复杂过程. 工厂模式呢?就像我们从劳动密集型社会转型到技术密集型社会.打个比方 ...

  4. Java抽象工厂模式

    Java抽象工厂模式 基本定义 抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的.抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象 ...

  5. Java的工厂模式(一)

    Java的工厂模式在框架中是用的到很多的,所谓的工厂模式,其实也就是用一个接口来创建对象,把实例化的工作推迟到子类去实现.这样在主函数中就可以直接创建一个工厂类,再通过这个工厂类实现操作. 假设有一个 ...

  6. Java简单工厂模式

    Java简单工厂模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简 ...

  7. Java 静态工厂模式的使用

    多相关文章请参考:http://www.enjoytoday.cn/categorys/java 静态工厂模式给人的第一印象就是:static+abstract.这两个词汇已经说明了一切,一个是周期长 ...

  8. 【设计模式】Java设计模式 -工厂模式

    [设计模式]Java设计模式 -工厂模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 目 ...

  9. Java实现工厂模式

    工厂模式(Factory),当需要根据运行时的一些条件来决定创建具体对象时,就应该考虑使用工厂设计模式,将创建对象的任务交给工厂集中处理. 工厂模式有多种写法,总体分为简单工厂模式和抽象工厂模式 工厂 ...

  10. SpringBoot使用策略模式+工厂模式

    为了防止大量的if...else...或switch case代码的出现,可以使用策略模式+工厂模式进行优化. 在我的项目当中,报表繁多,所以尝试了这种方式进行优化报表的架构.代码很简单,如下: Fa ...

随机推荐

  1. if语句中的判断条件(nginx)

    if语句中的判断条件   正则表达式匹配:     ==:等值比较;     ~:与指定正则表达式模式匹配时返回"真",判断匹配与否时区分字符大小写:     ~*:与指定正则表达 ...

  2. Python —基本数据类型

    运算符 1.算数运算: 2.比较运算: 3.赋值运算: 4.逻辑运算: 5.成员运算: 基本数据类型 1.数字 int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31- ...

  3. MVVM与Backbone demo

    MVVM https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel

  4. winserver2008 management note

    1,磁盘online及介质保护 Windows server 2008 增加的磁盘无法初始化-提示:介质受写入保护.插了下相关说明,在VMware的帖子找到了解决办法: 开始-运行,cmd.打开命令提 ...

  5. Redis在Linux下的安装和启动和配置

    第一步:下载Redis安装包,下载版本:3.0.5 在所在目录右键打开终端输入命令: wget http://download.redis.io/releases/redis-3.0.5.tar.gz ...

  6. 南非的5DT数据手套使用说明

    数据手套-5 Ultra/数据手套-14 Ultra 5DT 数据手套-Ultra数据手套的设计目的是为了满足现代动作捕捉和动画制作等专业人士的严格要求.它提供了舒适,易于使用,小型要素和多种应用的驱 ...

  7. Leetcode: Design Snake Game

    Design a Snake game that is played on a device with screen size = width x height. Play the game onli ...

  8. Android 自定义View (五)——实践

    前言: 前面已经介绍了<Android 自定义 view(四)-- onMeasure 方法理解>,那么这次我们就来小实践下吧 任务: 公司现有两个任务需要我完成 (1)监测液化天然气液压 ...

  9. @RequestMapping注解详解

    @RequestMapping是一个用来处理请求地址映射的注解,可用于类或者方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径.@RequestMapping注解有六个属性,下面进行 ...

  10. Windows Phone 十七、Socket

    Socket 常用类型 StreamSocket:Socket对象 StreamSocketListener:Socket监听对象,适用于服务端 服务端代码 <Grid x:Name=" ...