文档章节

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

江左煤郎
 江左煤郎
发布于 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. 工厂方法模式很好的体现了“依赖倒置原则”,即不能让高层组件依赖于低层组件,而高层组件和底层组件都应该依赖于接口或者抽象类。

 

详细可看:推荐博客

© 著作权归作者所有

共有 人打赏支持
江左煤郎
粉丝 17
博文 70
码字总数 180198
作品 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
设计模式: Java中的工厂设计模式

原文链接 https://github.com/shellhub/blog/issues/22 前言 工厂设计模式(Factory Design Pattern)属于创建模式之一,工厂设计模式在JDK,Spring,Stuts被广泛使用 当一个类或者接口有多个子类...

shellhub
08/22
0
0
小菜学设计模式——工厂方法模式

背景 简单工厂模式最大的优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关类,对于客户端来说,去除了与具体产品的依赖。如果,项目需要扩展,新增一种产品需要简...

learn_more
2015/06/07
0
0
从 Java 到 Scala (三): object 的应用

本文由 Captain 发表在 ScalaCool 团队博客。 在上篇 Java 到 Scala 系列中,我想你或多或少在语言特性上对有了一定的掌握,在了解完它酷酷的语言特性——让静态回归常态并能简单运用其衍生出...

ScalaCool
09/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JeeSite 4.x 树形结构的表设计和用法

有些同仁对于 JeeSite 4 中的树表设计不太了解,本应简单的方法就可实现,却写了很多复杂的语句和代码,所以有了这篇文章。 在 JeeSite 4 中的树表设计我还是相对满意的,这种设计比较容易理...

ThinkGem
14分钟前
10
0
0022-如何永久删除Kafka的Topic

1.问题描述 使用kafka-topics --delete命令删除topic时并没有真正的删除,而是把topic标记为:“marked for deletion”,导致重新创建相同名称的Topic时报错“already exists”。 2.问题复现...

Hadoop实操
17分钟前
0
0
技术工坊|区块链中的p2p网络(上海)

区块链是一个去中心化的系统,每个节点分布在全球各地,那么节点之间是如何自发地组成网络,又如何进行通信的?区块链中的p2p网络算法与bt下载中的p2p网络有什么区别?11月28日,第29期技术工...

HiBlock
22分钟前
1
0
MySQL性能优化之char、varchar、text的区别

在存储字符串时, 可以使用char、varchar或者text类型, 那么具体使用场景呢? 参考下面这个表结构: 1、 char长度固定, 即每条数据占用等长字节空间;适合用在身份证号码、手机号码等定。 ...

hansonwong
25分钟前
0
0
并发编程系列:4大并发工具类的功能、原理、以及应用场景

一:并发工具包 1.并发工具类 提供了比synchronized更加高级的各种同步结构:包括CountDownLatch、CyclicBarrier、Semaphore等,可以实现更加丰富的多线程操作。 2.并发容器 提供各种线程安全...

游人未归
35分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部