文档章节

学习设计模式——工厂方法模式

江左煤郎
 江左煤郎
发布于 2018/10/15 22:44
字数 839
阅读 12
收藏 0

1. 认识工厂方法模式

    1. 功能:定义一个用于创建对象的接口,让子类决定实例化哪一个类,该模式使一个类的实例化延迟到其子类中。

    2. 组织结构:

  • Product: 定义工厂方法中用来创建对象的接口
  • ProductImpl: Product接口的实现类
  • Creator: 创建器
  • CreatorImpl: 创建器的具体对象,覆盖实现Creator中定义的方法,返回具体的Product实例

    3. 参考代码实现:

public interface Product {
	//定义需要的方法
	public void test();
}
public class ProductImpl implements Product{
	//实现Product中定义的方法
	@Override
	public void test() {
		System.out.println("test");
	}
	
}
//工厂模式的抽象类
public abstract class Creator {
	//该抽象方法就是工厂方法,其具体实现依赖于子类
	protected abstract Product factoryMehtod();
	
	//调用子类实现的factoryMehtod方法来调用Product接口的实现类中定义的方法
	public void test() {
		//具体生成的是Product接口的哪一个实现类,由factoryMehtod方法决定
		//如果有多个Product接口的实现类,则可以通过方法参数来进行判断到底选择哪一个Product接口的实现类
		Product p=factoryMehtod();
		p.test();
	}
}
//工厂方法模式的具体实现类
public class CreatorImpl extends Creator {
	//Creator抽象类的子类仅仅是用来确定到底factoryMehtod方法创建的是哪一个Product接口的实现类
	@Override
	protected Product factoryMehtod() {
		return new ProductImpl();
	}
}
//客户端此时就不需要绑定ProductImpl类来调用其test功能,只需要Creator工厂即可
public class Client {
	public static void main(String[] args) {
		//现在要执行Product接口的test功能
		Creator c=new CreatorImpl();
		c.test();
	}
}

2. 理解工厂方法模式

    1. 作用:让父类在不知道具体实现的情况下,完成自身的功能调用,而具体的实现由子类来实现。

    2. 工厂方法具体实现所在的类的父类通常都是一个抽象类,比如参考代码中的Creator 类,因为该抽象类需要定义用来创建所需对象的抽象方法,而这些抽象方法就是工厂方法。

    3. 工厂方法具体实现所在的类的父类可以是一个普具体的类,这种情况下就需要实现一个创建所需对象的默认的方法,即使没有子类,也可以运行,子类则只需要对其进行覆盖即可。

    4. 工厂方法的参数和返回值:以参考代码的中factoryMehtod方法为例,如果Product接口的实现类有多个,那么可以通过方法参数来进行判断到底需要哪一个Product接口的实现类,而返回值类型通常都是接口,也可以是抽象类或具体的类。

    5. 工厂方法模式很好的体现了“依赖倒置原则”,即不能让高层组件依赖于低层组件,而高层组件和底层组件都应该依赖于接口或者抽象类。

 

详细可看:推荐博客

© 著作权归作者所有

共有 人打赏支持
江左煤郎
粉丝 26
博文 86
码字总数 220642
作品 0
西安
后端工程师
私信 提问
JAVA基础再回首(二十六)——面向对象思想设计原则、设计模式、简单工厂模式、工厂方法模式、单例设计模式之饿汉式和懒汉式、Runtime类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m366917/article/details/52717096 JAVA基础再回首(二十六)——面向对象思想设计原则、设计模式、简单工厂模...

Aduroidpc
2016/10/01
0
0
C#设计模式(2)——简单工厂模式

一、引言   这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式——简单工...

技术小胖子
2017/11/08
0
0
简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别

转载:原地址http://www.cnblogs.com/zhangchenliang/p/3700820.html 简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别 结合简单示例和UML图,讲解工厂模式简单原理。 一、引子 话说...

法斗斗
2018/05/08
0
0
设计模式15——Template Method设计模式

Template Method模板方法设计模式定义一个操作中算法的骨架,将具体步骤的执行延迟到子类中实现。Java中的抽象类就是使用了模板方法设计模式。模板方法设计模式结构如下: 以文档处理为例,T...

小米米儿小
2014/01/24
0
0
练就Java24章真经—你所不知道的工厂方法

前言 最近一直在Java方向奋斗《终于,我还是下决心学Java后台了》,今天抽空开始学习Java的设计模式了 。计划有时间就去学习,你这么有时间,还不来一起上车吗? 之所以要学习Java模式,是因...

codeGoogle
2018/10/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

漏洞防御与修复工作

漏洞管理工作是企业安全建设必不可少的一环,在风险管理工作中,漏洞管理能够防患于未然,企业对漏洞管理有着广泛的基础建设和实践经验。但随着攻防技术的发展,传统漏洞管理的安全技术和管理...

linuxprobe16
11分钟前
0
0
MicroPython技术及应用前景

1 Micropython技术是什么? MicroPython极精简高效的实现了Python3语言。它包含Python标准库的一小部分,能在单片机和受限环境中运行。 1.1 MicroPython发展 由剑桥大学的理论物理学家乔治....

bodasisiter
17分钟前
0
0
跟我学Spring Cloud(Finchley版)-13-通用方式使用Hystrix

本节详细讲解使用Hystrix的通用方式。 简介 Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而提升系统的可用性与容错性。Hystrix主要...

周立_ITMuch
26分钟前
0
0
🛠️Hanjst/汉吉斯特更新加JavaScript运行时优化等

这是 Hanjst/汉吉斯特 发布以来的首个主要升级更新版本。这次的主要升级更新的内容包括移除HTML Comments注释行, 优化在 Hanjst include模板文件时的JavaScript运行时环境。 Hanjst 在设计和...

wadelau
今天
2
0
OSChina 周六乱弹 —— 舔狗是没有好下场的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @我没有抓狂 :#今天听什么# #今天听这个# 分享 Nirvana 的歌曲《Smells Like Teen Spi...》 《Smells Like Teen Spi...》- Nirvana 手机党少...

小小编辑
今天
463
13

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部