工厂模式

工厂模式

目录

  • 何为工厂模式
  • 工厂方法与抽象工厂
  • 如何在Java EE中通过@Producers@Inject注解实现工厂模式
  • 如何创建自定义注解以及通过@Qualifier消除具体实现之间的歧义 工厂模式有两种模式:工厂方法和抽象方法。它们的意图是一样的:提供一个接口,在不指定具体类的情况下创建相关或依赖的一系列对象。

一.何为工厂模式

工厂的目的在于创建对象。创建的逻辑被封装在工厂中,要么提供一个方法来返回新创建的对象(工厂方法模式),要么将对象的创建委托给子类(抽象工厂模式)。 客户端不必考虑接口或类的不同实现,它只需通过工厂(工厂)获取接口实现的一个实例的即可,这样客户端与对象的创建就实现了解耦 解耦是应用依赖反转原则的结果,这带来了很多好处,其中最重要的好处就是实现了高层类与底层类之间的解耦。通过解耦,具体类实现的变化不会影响到客户端,这降低了类与类之间的耦合,并提升了灵活性。

二.工厂方法

GoF一书是这样描述工程方法模式的:“定义一个用于创建对象的接口,不过让子类决定实例化那个类” 工厂极大降低了new关键字的使用次数,并且将初始化过程与不同的具体实现封装起来。将这些需求中心化可以极大减少向系统中添加或删除具体类的影响以及具体的类依赖的影响。

1.使用普通代码实现工厂方法 被具体实现继承的DrinksMachine抽象类

public abstract class DrinksMachine {
    public abstract Drink dispenseDrink();
    public String displayMessage(){
        return "Thank for your custom.";
    }
}

DrinksMachine抽象类的CoffeeMachine实现

public class CoffeeMachine extends DrinksMachine {
    public Drink dispenseDrink() {
        return new Coffee();
    }
}

DrinksMachine抽象类的SoftDrinksMachine实现

public class SoftDrinksMachine extends DrinksMachine {
    public Drink dispenseDrink() {
        return new SoftDrink();
    }
}

Drink接口

public interface Drink {}

Drink接口的SoftDrink实现

public class SoftDrink implements Drink {
    SoftDrink() {
        System.out.println("Soft drink");
    }
}

Drink接口的Coffee实现

public class Coffee implements Drink {
    Coffee() {
        System.out.println("Coffee");
    }
}

CoffeeType枚举

java<br>public enum CoffeeType {EXPRESSO, LATTE}</p> <p>public Drink dispenseDrink(CoffeeType type) {<br> Drink coffee = null;<br> switch (type) {<br> case EXPRESSO: coffee = new Expresso();<br> case LATTE: coffee = new Latte();<br> }<br> return coffee;<br>}<br>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java Edge

(六)-class文件结构1 什么是JVM的“无关性”?2 纵观Class文件结构

2798
来自专栏Golang语言社区

Golang语言中的流程控制结构和函数详解

流程控制 流程控制在编程语言中是最伟大的发明了,因为有了它,你可以通过很简单的流程描述来表达很复杂的逻辑。Go中流程控制分三大类:条件判断,循环控制和无条件跳转...

3457
来自专栏java思维导图

深入浅出Java中JVM内存管理

Java岗位面试,JVM是对程序员基本功考察,通常会问你对JVM了解吗? 可以分几部分回答这个问题,首先JVM内存划分 | JVM垃圾回收的含义 | 有哪...

702
来自专栏C/C++基础

C++ struct与union

编码运行环境:VS2012+Win32+Debug Win32既表示运行平台是Windows 32bits操作系统,又表示生成32bits的应用程序。

481
来自专栏青枫的专栏

day02_js学习笔记_01_js的简介、js的基本语法

622
来自专栏逆向技术

16位汇编第五讲各种指令详解第一讲

汇编指令详解 8080指令详解 1.8086系统下,Inter指令系统共有117条指令(看似很多,分一下类) 1.数据传送类指令(专门传送数据的) 2.算术运算...

1755
来自专栏Java Edge

数据类型的转换

2657
来自专栏程序员互动联盟

【编程基础】C函数的调用过程

这几天在看GCC Inline Assembly,在C代码中通过asm或__asm__嵌入一些汇编代码,如进行系统调用,使用寄存器以提高性能能,需要对函数调用过...

3075
来自专栏Golang语言社区

Go语言语法汇总

最近看了看GoLang,把Go语言的语法总结了一下,做个快速参考 数据类型 ---- var varName type,var var1,var2… type,...

33413
来自专栏大数据挖掘DT机器学习

Python一些基础面试题目总结

1 Python是如何进行内存管理的? 答:从三个方面来说,一对象的引用计数机制,二垃圾回收机制,三内存池机制 一、对象的引用计数机制 pytho...

3326

扫码关注云+社区