博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式_08_简单工厂模式
阅读量:4161 次
发布时间:2019-05-26

本文共 1709 字,大约阅读时间需要 5 分钟。

简单工厂模式

  • 定义:由一个工厂对象决定创建出哪一种产品类的实例
  • 类型:创建型,但不属于GOF23种设计模式
  • 适用场景:
    1. 工厂类负责创建的对象比较少
    2. 客户端(应用层)只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心
  • 优点:
    1. 只需要传入一个正确的参数,就可以获取所需要的对象,而无须知道其创建细节
  • 缺点:
    1. 工厂类的职责相对过重,增加新的产品需要修改工厂类的判断逻辑,违背开闭原则
    2. 无法形成基于继承的等级结构
public abstract class Video {
public abstract void produce();}
public class JavaVideo extends Video {
@Override public void produce() {
System.out.println("Java 课程"); }}
public class PythonVideo extends Video {
@Override public void produce() {
System.out.println("python 课程"); }}
public class VideoFactory {
public Video getVideo1(String type) {
if ("java".equals(type)) {
return new JavaVideo(); } else if ("python".equals(type)) {
return new PythonVideo(); } else {
return null; } } //反射方式 public Video getVideo2(Class c) {
Video video = null; try {
video = (Video) Class.forName(c.getName()).newInstance(); } catch (InstantiationException e) {
e.printStackTrace(); } catch (IllegalAccessException e) {
e.printStackTrace(); } catch (ClassNotFoundException e) {
e.printStackTrace(); } return video; }}
public class Test {
public static void main(String[] args) {
VideoFactory factory = new VideoFactory(); Video video = factory.getVideo1("java"); if (null != video) {
video.produce(); } System.out.println("-------------------"); Video video2 = factory.getVideo2(JavaVideo.class); if (null != video) {
video2.produce(); } }}

JDK源码中单例实现类图:

在这里插入图片描述

转载地址:http://lzixi.baihongyu.com/

你可能感兴趣的文章
windows运行对话框命令大全
查看>>
ftp站点收录
查看>>
常用网络命令
查看>>
Hadoop Map/Reduce教程
查看>>
学习Linux应该掌握的
查看>>
踏上Linux内核学习之旅
查看>>
Linux重装时保留分区
查看>>
HBase的概念和性能选项
查看>>
HBase相关链接
查看>>
FreeBSD的安装
查看>>
tcpdump的输出分析
查看>>
最喜欢的奥斯卡金曲
查看>>
重写strcpy() 函数原型
查看>>
sizeof的用法(附strlen函数)
查看>>
C 面试题之找错题
查看>>
计算机专业必看书籍
查看>>
计算机专业经典书籍
查看>>
C++书籍汇总
查看>>
安装wine出现的问题与解决
查看>>
JAVA(一)
查看>>