当前位置: 首页 > news >正文

Java设计模式——工厂方法模式(完整详解,附有代码+案例)

文章目录

    • 5.3 工厂方法模式
      • 5.3.1概述
      • 5.3.2 结构
      • 5.3.3 实现

5.3 工厂方法模式

针对5.2.3中的缺点,使用工厂方法模式就可以完美的解决,完全遵循开闭原则。

5.3.1概述

工厂方法模式:定义一个创建对象的接口(这里的接口指的是工厂),让子类(子类 指实现工厂接口的子类)决定实例化哪个产品类对象。工厂方法使一个产品类的实例化延迟到其工厂的子类。

5.3.2 结构

工厂方法模式的主要角色:

  • 抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过抽象工厂访问具体工厂(多态)的工厂方法来创建产品对象。
  • 具体工厂(ConcreteFactory):主要是实现抽象工厂中的抽象方法,完成具体产品的创建。
  • 抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。
  • 具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应。

5.3.3 实现

使用工厂方法模式对5.2.3中的案列进行改进,类图如下:

在这里插入图片描述

// 咖啡抽象类
public abstract class Coffee {public abstract String getName();public void addMilk(){System.out.println("加奶...");}public void addSugar(){System.out.println("加糖...");}
}
============================================================//拿铁咖啡类 实现 抽象咖啡类接口public class LatteCoffee extends Coffee{@Overridepublic String getName() {return "拿铁咖啡";}
}
===========================================================// 美式咖啡类 实现 抽象咖啡类接口
public class AmericanCoffee extends Coffee{@Overridepublic String getName() {return "美式咖啡";}
}
===========================================================
// 定义咖啡工厂接口
public interface CoffeeFactory {public abstract Coffee creatCoffee();
}
========================================================// 创建拿铁咖啡工厂类 实现 咖啡工厂类接口
public class LatteCoffeeFactory implements CoffeeFactory{@Overridepublic Coffee creatCoffee() {return new LatteCoffee();}
}
==========================================================// 创建美式咖啡工厂类 实现 咖啡工厂类接口
public class AmericanCoffeeFactory implements CoffeeFactory {@Overridepublic Coffee creatCoffee() {return new AmericanCoffee();}
}
==========================================================//咖啡店类public class CoffeeStore {private CoffeeFactory coffeeFactory;public void setCoffeeFactory(CoffeeFactory coffeeFactory) {this.coffeeFactory = coffeeFactory;}public Coffee orderCoffee(){// 咖啡工厂来创建具体的咖啡Coffee coffee = coffeeFactory.creatCoffee();// 加配料coffee.addMilk();coffee.addSugar();return coffee;}}
====================================================public class ClientTest {public static void main(String[] args) {// 创建咖啡店类对象CoffeeStore coffeeStore = new CoffeeStore();//创建拿铁咖啡工厂,多态CoffeeFactory coffeeFactory = new LatteCoffeeFactory();//CoffeeFactory amerFactory  = new AmericanCoffeeFactory();coffeeStore.setCoffeeFactory(coffeeFactory);// 点咖啡Coffee coffee = coffeeStore.orderCoffee();System.out.println(coffee.getName());//输出:加奶...  加糖...  拿铁咖啡}
}

http://www.mrgr.cn/news/31066.html

相关文章:

  • 从Huggingface下载数据集时添加正则表达式
  • 【环境踩坑系列】CentOS7 安装 MySQl 5.7.25
  • Python打包神器pyinstaller和tkinter图形化GUI界面
  • 使用ultralytics库微调 YOLO World 保持 Zero-Shot 能力
  • 101. 对称二叉树
  • 若依笔记(六):前后端token鉴权体系
  • AV1 Bitstream Decoding Process Specification--[7]: 语法结构语义-3
  • Shader Graph Create Node---Channel
  • 树莓派4B+UBUNTU20.04+静态ip+ssh配置
  • Node-red 某一时间范围内满足条件的数据只返回一次
  • Spring的IOC和AOP
  • sheng的学习笔记-AI-强化学习(Reinforcement Learning, RL)
  • arduino IDE TFT_eSPI库函数的相关函数
  • 23种设计模式,纯简单里面,面试必备
  • 马踏棋盘c++
  • 谈对象第二弹: C++类和对象(中)
  • 梧桐数据库(WuTongDB):SQL Server Query Optimizer 简介
  • 【VUE3.0】动手做一套像素风的前端UI组件库---Button
  • 测试框架研讨
  • OpenCV 2