工厂模式——java设计模式
工厂模式
目录
- 何为工厂模式
- 工厂方法与抽象工厂
- 如何在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枚举
public enum CoffeeType {EXPRESSO, LATTE}
public Drink dispenseDrink(CoffeeType type) {
Drink coffee = null;
switch (type) {
case EXPRESSO: coffee = new Expresso();
case LATTE: coffee = new Latte();
}
return coffee;
}
三、抽象工厂
GoF中的描述为:提供一个接口来创建一系列相关或依赖的对象而不必指定具体类
抽象工厂接口
public interface AbstractDrinksMachineFactory {
public DrinksMachine createCoffeeMachine();
public DrinksMachine createSoftDrinksMachine();
}```
AbstractDrinksMachineFactorr的实现
```java
public class GourmetDrinksMachineFactory implements AbstractDrinksMachineFactory{
public DrinksMachine createCoffeeMachine() {
return new GourmetCoffeeMachine();
}
public DrinksMachine createSoftDrinksMachine() {
return new GourmetSoftDrinksMachine();
}
}
工厂模式——java设计模式的更多相关文章
- 设计模式之第2章-抽象工厂模式(Java实现)
设计模式之第2章-抽象工厂模式(Java实现) “上次是我的不对,贿赂作者让我先讲来着,不过老婆大人大人有大量,不与我计较,这次还让我先把上次未讲完的应用场景部分给补充上去,有妻如此,夫复何求.”(说 ...
- 软件设计模式之工厂模式(JAVA)
什么是工厂模式? 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式.著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见.因为工厂模式就相 ...
- 设计模式之抽象工厂模式(Java实现)
“上次是我的不对,贿赂作者让我先讲来着,不过老婆大人大人有大量,不与我计较,这次还让我先把上次未讲完的应用场景部分给补充上去,有妻如此,夫复何求.”(说完,摸了摸跪的发疼的膝盖,咳咳,我发四我没笑!真 ...
- 工厂模式Java
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...
- 悟空模式-java设计模式
目前已定义的java设计模式细分下来有二十余种,这篇博客主要是想从大家所熟知的孙悟空入手,阐述各个设计模式的概念和优缺点,以及他们之间的联系. 在下面介绍的每个设计模式里,都会有与西游记相关的具体案例 ...
- 抽象工厂模式(JAVA反射)
实例代码(JAVA):模式动机 在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方 ...
- 抽象工厂模式--java代码实现
抽象工厂模式 抽象工厂模式,对方法工厂模式进行抽象.世界各地都有自己的水果园,我们将这些水果园抽象为一个水果园接口,在中国.英国和美国都有水果园,种植不同的水果,比如苹果.香蕉和梨等.这里将苹果进行抽 ...
- 简单工厂模式--java代码实现
简单工厂模式 工厂,生产产品的场所.比如农夫山泉工厂,生产农夫山泉矿泉水.茶π等饮料.矿泉水和茶π都属于饮料,都具有解渴的功能,但是每种饮料给人的感觉是不一样的.矿泉水和茶π在Java中相当于子类,饮 ...
- AbstractFactoryPattern(抽象工厂模式)-----Java/.Net
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.
随机推荐
- 可以替代alert 的漂亮的Js弹框
1 基本弹框 2确认框 3又一种确认框 4带返回的弹框 5带返回的探矿 6 6 一切尽在 http://t4t5.github.io/sweetalert/
- Scala_数据结构
数据结构 容器(Collection) Scala提供了一套丰富的容器(collection)库,包括列表 (List).数组(Array).集合(Set).映射(Map)等 根据容器中元素的组织方式 ...
- stm32f103_高级定时器——输入捕获/输出比较中断+pwm=spwm生成
****************************首选我们了解一下它们的功能吧********************************************************** ...
- linux-python在vim下的自动补全功能
linux-python在vim下的自动补全功能 安装配置: wget https://github.com/rkulla/pydiction/archive/master.zipunzip -q m ...
- ASP.NET Web API 框架研究 Controller创建 HttpController 类型解析 选择 创建
上一篇介绍了HttpController的一些细节,接下来说下HttpController 类型解析.选择和创建.生产HttpController实例的生产线如下图: 一.涉及的类及源码分析 涉及的类 ...
- ExternalException (0x80004005): GDI+ 中发生一般性错误
.net开发的程序用了一个自绘的框架, 平常部署到IIS上都没有问题,今天突然之间这个功能就运行不起来了. 报错:GDI+错误,然后在本地的VS里面运行是没有问题的 百度出来的改Path环境变量.注册 ...
- websevice动态控制访问ip
一般而言webservice是部署在哪台服务器,然后它的address location就是指向哪个,但是由于有些情况处于各种原因,如网络策略,需要先访问某个ip之后再进行跳转到一个ip,这个时候就需 ...
- ASP.Net MVC OA项目笔记<一>
1.1.1 新建空白解决方案CZBK.ItcastOA 1.2.1 添加类库 1.2.2 同上添加多个类库 生成的 class1.cs先不用删除,删了的后,后面可能没办法直接点引用 1.3.1 添加表 ...
- Spring Cloud实践之集中配置Spring-config
将一个系统中各个应用的配置文件集中起来,方便管理. import org.springframework.boot.SpringApplication; import org.springframew ...
- JQuery 知识
1.修改标签内容: *html( ) 相当于innerHTML * text( ) 相当于innerText 2.属性操作: *attr( ) 读/写/添加/设置属性 *removeAttr ...