工厂模式(Factory),当需要根据运行时的一些条件来决定创建具体对象时,就应该考虑使用工厂设计模式,将创建对象的任务交给工厂集中处理。

工厂模式有多种写法,总体分为简单工厂模式和抽象工厂模式

工厂模式示例:星工场

加入星工场可以生产各种明星:唱歌的,跳舞的,打篮球的...

明星抽象类

public abstract class Star
{
public abstract void show();
}

唱歌的

public class SingStar extends Star
{
@Override
public void show()
{
System.out.println("你看这碗又大又圆 你看这面又长又宽");
}
}

跳舞的

public class DancingStar extends Star
{
@Override
public void show()
{
System.out.println("唱 跳 Rap");
}
}

打篮球的

public class BasketballStar extends Star
{
@Override
public void show()
{
System.out.println("波兰第一中锋");
}
}

现在要创建一个明星,参数为明星的类型

不使用工厂

如果不使用工厂,就是在需要对象的地方,直接创建对象

public Star newStar(String type)
{
Star star=null;
if(type.equals("singer"))
{
star=new SingStar();
}
else if(type.equals("dancer"))
{
star=new DancingStar();
}
else if(type.equals("basketball"))
{
star=new BasketballStar();
}
return star;
}

简单工厂模式

简单工厂其实就是把创建对象的代码抽取到一个单独的工厂类中,需要对象的地方,调用工厂类中的方法即可

public class SimpleFactory
{
public Star newStar(String type)
{
Star star=null;
if(type.equals("singer"))
{
star=new SingStar();
}
else if(type.equals("dancer"))
{
star=new DancingStar();
}
else if(type.equals("basketball"))
{
star=new BasketballStar();
}
return star;
}
}

还可以使用静态方法,称为静态工厂模式

public static Star newStar(String type)
{
// ...
}

还可以将表示对象类型的参数从字符串类型改为使用Class对象,进一步简化代码

public static Star newStar(Class<? extends Star> clz)
{
try
{
return clz.getConstructor().newInstance();
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
}

使用的时候,传入对应类型的Class对象即可

Star star = SimpleFactory.newStar(SingStar.class);
star.show();

抽象工厂模式

抽象工厂模式,其实就是工厂的工厂。

首先需要定义工厂共同实现的接口,然后每个工厂分别实现它。

抽象工厂接口

public interface Factory
{
Star newStar(Class<? extends Star> clz);
}

具体工厂类略

Java实现工厂模式的更多相关文章

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

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

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

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

  3. Java抽象工厂模式

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

  4. Java的工厂模式(一)

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

  5. Java简单工厂模式

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

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

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

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

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

  8. java 深入浅出工厂模式

    一.引子 话说十年前,有一个暴发户,他家有三辆汽车——Benz奔驰.Bmw宝马.Audi奥迪,还雇了司机为他开车.不过,暴发户坐车时总是怪怪的:上Benz车后跟司机说“开奔驰车!”,坐上Bmw后他说“ ...

  9. 10.Java设计模式 工厂模式,单例模式

    Java 之工厂方法和抽象工厂模式 1. 概念 工厂方法:一抽象产品类派生出多个具体产品类:一抽象工厂类派生出多个具体工厂类:每个具体工厂类只能创建一个具体产品类的实例. 即定义一个创建对象的接口(即 ...

  10. 从基础知识到重写Spring的Bean工厂中学习java的工厂模式

    1.静态工厂模式其他对象不能直接通过new得到某个类,而是通过调用getInstance()方法得到该类的对象这样,就可以控制类的产生过程.顺带提一下单例模式和多例模式:  单例模式是指控制其他对象获 ...

随机推荐

  1. .Net Core——用代码写代码?

    想要用代码写代码,肯定是绕不开反射的.反射的概念相比都不陌生,只是应用多少就因人而异,今天分享一个代码生成器的思路,仅供参考,不要过分依赖哦. 思路分析 众所周知,利用反射可以在程序运行时获取到任一对 ...

  2. Java并发-显式锁篇【可重入锁+读写锁】

    作者:汤圆 个人博客:javalover.cc 前言 在前面并发的开篇,我们介绍过内置锁synchronized: 这节我们再介绍下显式锁Lock 显式锁包括:可重入锁ReentrantLock.读写 ...

  3. centos7 连接打印机

    centos7 连接打印机 2017-08-07 15:05:33 五岳寻仙客 阅读数 2531更多 分类专栏: Liunx的日常使用   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版 ...

  4. 022.Python模块序列化模块(json,pickle)和math模块

    序列化模块 一  序列化模块 pickle 1.1 基本认识 序列化:把不能够直接存储的数据变成可存储的过程就是序列化 反序列化:把储存的数据拿出来恢复成原来的数据类型就是反序列化 例如,一个文件不可 ...

  5. ubuntu中安装meld工具-(转自sukhoi27smk)

    Ubuntu下文件/目录对比的软件Meld可能有很多用户还不是很熟悉,下文就给大家介绍如何安装Meld和移植到Gedit下.具体内容如下所述. Meld允许用户查看文件.目录间的变化.很容易移植到Ge ...

  6. linux中级之lvs概念

    一.lvs介绍 LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器.它是我们国家的章文嵩博士的一个开源项目.在linux内存2.6中,它已经成为内核的一部分,在此之前的 ...

  7. 使用mybatis逆向工程Example类,(或者)or条件查询(Day_47)

    使用Example类,or条件查询 SetmealExample setmealExample=new SetmealExample(); setmealExample.or().andNameLik ...

  8. Step By Step(Lua元表与元方法)

    Step By Step(Lua元表与元方法) Lua中提供的元表是用于帮助Lua数据变量完成某些非预定义功能的个性化行为,如两个table的相加.假设a和b都是table,通过元表可以定义如何计算表 ...

  9. harbor搭建及使用

    harbor搭建及使用   1 系统及软件版本 1.1 系统版本 # uname -a Linux localhost.localdomain 3.10.0-862.el7.x86_64 #1 SMP ...

  10. Deeplearning知识蒸馏

    Deeplearning知识蒸馏 merge paddleslim.dist.merge(teacher_program, student_program, data_name_map, place, ...