Java实现工厂模式
工厂模式(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实现工厂模式的更多相关文章
- !!转!!java 简单工厂模式
举两个例子以快速明白Java中的简单工厂模式: 女娲抟土造人话说:“天地开辟,未有人民,女娲抟土为人.”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的思想里面.女娲造人,这就是 ...
- 一张图搞定Java设计模式——工厂模式! 就问你要不要学!
小编今天分享的内容是Java设计模式之工厂模式. 收藏之前,务必点个赞,这对小编能否在头条继续给大家分享Java的知识很重要,谢谢!文末有投票,你想了解Java的哪一部分内容,请反馈给我. 获取学习资 ...
- Java抽象工厂模式
Java抽象工厂模式 基本定义 抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的.抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象 ...
- Java的工厂模式(一)
Java的工厂模式在框架中是用的到很多的,所谓的工厂模式,其实也就是用一个接口来创建对象,把实例化的工作推迟到子类去实现.这样在主函数中就可以直接创建一个工厂类,再通过这个工厂类实现操作. 假设有一个 ...
- Java简单工厂模式
Java简单工厂模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简 ...
- Java 静态工厂模式的使用
多相关文章请参考:http://www.enjoytoday.cn/categorys/java 静态工厂模式给人的第一印象就是:static+abstract.这两个词汇已经说明了一切,一个是周期长 ...
- 【设计模式】Java设计模式 -工厂模式
[设计模式]Java设计模式 -工厂模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 目 ...
- java 深入浅出工厂模式
一.引子 话说十年前,有一个暴发户,他家有三辆汽车——Benz奔驰.Bmw宝马.Audi奥迪,还雇了司机为他开车.不过,暴发户坐车时总是怪怪的:上Benz车后跟司机说“开奔驰车!”,坐上Bmw后他说“ ...
- 10.Java设计模式 工厂模式,单例模式
Java 之工厂方法和抽象工厂模式 1. 概念 工厂方法:一抽象产品类派生出多个具体产品类:一抽象工厂类派生出多个具体工厂类:每个具体工厂类只能创建一个具体产品类的实例. 即定义一个创建对象的接口(即 ...
- 从基础知识到重写Spring的Bean工厂中学习java的工厂模式
1.静态工厂模式其他对象不能直接通过new得到某个类,而是通过调用getInstance()方法得到该类的对象这样,就可以控制类的产生过程.顺带提一下单例模式和多例模式: 单例模式是指控制其他对象获 ...
随机推荐
- not full 和 default
create table t16( id int, name char(6), sex enum('male','female') not null default 'male'); insert i ...
- ES6学习-3 const
const声明一个只读的常量.一旦声明,常量的值就不能改变,所以在声名时就进行赋值. const的作用域与let命令相同,只在声明所在的块级作用域内有效. const命令声明的常量,同样存在暂时性死区 ...
- golang:函数总结
golang保留的函数 init(), main()是golang的保留函数,有如下特点: main() 只能用在main包中,仅可定义一个,init() 可定义任意包,可重复定义,建议只定义一个 两 ...
- [算法] O(nlogn)和O(n^2)算法性能比较
选择排序.插入排序.归并排序 main.cpp 1 #include <iostream> 2 #include "Student.h" 3 #include &quo ...
- 磁盘IO过高时的处理办法 针对系统中磁盘IO负载过高的指导性操作
磁盘IO过高时的处理办法 针对系统中磁盘IO负载过高的指导性操作 主要命令:echo deadline > /sys/block/sda/queue/scheduler 注:以下的内容仅是提供参 ...
- CentOS7配置kdump
CentOS7配置kdump 简单生活,简单爱 2020-10-27 16:29:56 56 收藏 1 分类专栏: Linux实际开发总结 版权 文章目录 1.kdump简介 2.配置kdump ...
- netperf对比
netperf -H 10.1.60.141 -t TCP_STREAM -l 60 -p 10082 netperf -H 10.1.60.141 -t UDP_STREAM -l 60 -p ...
- 【转载】linux 设备管理器 图形hardinfo 字符 lshw lspci
在ubuntu中怎样启动类似windows中的 设备管理器 sudo apt-get install hardinfo lspci sudo lshw everestubuntu下的"设备管 ...
- 【BIGDATA】在Centos上部署ElasticSearch 7.3.2及kibana
一.下载: 首先,下载ElasticSearch和kibana安装包,版本自选,官方下载页https://www.elastic.co/cn/downloads/ 二.版本检查 很重要的一步,要检查C ...
- Linux中的防火墙
firewalld 一.防火墙安全概述 firewalld支持命令行也支持GUI设置,相对于iptables,firewalld配置更加的方便.在底层的命令都是iptables, firewalld ...