网站首页 > 教程分享 正文
抽象工厂相比于前两种工厂,应用场景少一些,但在特殊场景下,也能发挥非常好的作用。
抽象工厂用在哪些场景?
还是基于前两节的例子,基于果汁和酸奶的例子,如果现在我们不仅只生产饮品,还要生产苹果味的饼干,此时要怎么做呢?
按照工厂方法模式,需要再建立一个苹果饼干工厂来生产苹果饼干,如果还需要苹果味果冻,那就需要再建立苹果味果冻工厂,如果还需要…,结果就是要建立一大堆对应的工厂,这样的结果就是维护困难,而且代码也不友好。
此时就可以使用抽象工厂,抽象工厂的作用就是,在抽象工厂中定义不只一种产品的生产,然后由具体工厂实现,这样一个具体工厂就可以包含多种产品的生产了,工厂数量就减少了,类也就少了。
角色包括:
抽象工厂:定义多种产品的生产
具体工厂:继承抽象工厂,实现抽象工厂中定义的多种产品
抽象产品:定义产能特性
具体产品:生产具体产品
代码:
1、定义抽象工厂
package com.itzhimei.study.design.factory.abstractfactory;
public interface IAppleFactory {
/**
* 定义果汁方法
* @return
*/
IFruitsJuice getFruitsJuice();
/**
* 定义水果饼干方法
* @return
*/
IFruitsCookie getFruitsCookie();
}
抽象工厂的核心就在上面这里,这里有两个生产方法。
2、定义具体工厂,实现生产各类产品
/**
* www.itzhimei.com
* 具体工厂
*/
public class AppleFactory implements IAppleFactory {
@Override
public IFruitsJuice getFruitsJuice() {
return new AppleJuice();
}
@Override
public IFruitsCookie getFruitsCookie() {
return new AppleCookie();
}
}
3、定义抽象产品和实现抽象产品的具体产品
/**
* www.itzhimei.com
* 果汁接口
*/
public interface IFruitsJuice {
/**
* 定义果汁方法
* @return
*/
String getFruitsJuice();
}
/**
* www.itzhimei.com
* 苹果汁
*/
public class AppleJuice implements IFruitsJuice {
@Override
public String getFruitsJuice() {
return "苹果汁";
}
}
public interface IFruitsCookie {
/**
* 定义水果饼干方法
* @return
*/
String getFruitsCookie();
}
/**
* www.itzhimei.com
* 苹果饼干
*/
public class AppleCookie implements IFruitsCookie {
@Override
public String getFruitsCookie() {
return "苹果饼干";
}
}
4、测试
/**
* www.itzhimei.com
* 测试
*/
public class Client {
public static void main(String[] args) {
IAppleFactory af = new AppleFactory();
System.out.println(af.getFruitsJuice().getFruitsJuice());
System.out.println(af.getFruitsCookie().getFruitsCookie());
}
}
涉及的类:
类关系图:
总结:
学习了上面的内容和代码之后,抽象工厂其实从名字也能看出其特性,就是对工厂的抽象,也就对工厂类数量的简化,对单个工厂能力的提升,因为一个工厂中生产的产品变多了。
猜你喜欢
- 2024-10-18 Aha!设计模式(3)-抽象工厂(2)(抽象工厂模式结构图)
- 2024-10-18 Java经典设计模式-抽象工厂模式(抽象工厂模式在spring的应用)
- 2024-10-18 Java高级编程细节——工厂模式之抽象工厂
- 2024-10-18 java与设计模式-简单工厂-工厂方法-抽象工厂
- 2024-10-18 简单工厂,工厂方法,抽象工厂(简单工厂,工厂方法,抽象工厂区别)
- 2024-10-18 Aha!设计模式(1)-抽象工厂(1)(抽象工厂实例)
- 2024-10-18 抽象工厂模式(Abstract Factory)(抽象工厂模式的意图是)
- 2024-10-18 设计模式记录-抽象工厂模式(抽象工厂模式与工厂方法模式)
- 2024-10-18 你还在new对象吗?用个“抽象工厂模式”生产对象它不香吗
- 2024-10-18 白话设计模式之抽象工厂模式(抽象工厂模式是简单工厂模式的升级版本)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)