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

【设计模式】【创建型5-2】【工厂方法模式】

文章目录

  • 工厂方法模式
    • 工厂方法模式的结构
    • 示例
      • 产品接口
      • 具体产品
      • 工厂接口
      • 具体工厂
      • 客户端代码
    • 实际的使用

工厂方法模式

工厂方法模式的结构

产品(Product):定义工厂方法所创建的对象的接口。
具体产品(ConcreteProduct):实现产品接口的具体类。
工厂(Creator):声明工厂方法,返回一个产品对象。
具体工厂(ConcreteCreator):实现工厂方法,返回具体产品实例。

示例

产品接口

// 披萨接口
public interface Pizza {void prepare();void bake();void cut();void box();
}

具体产品

// 意大利披萨
public class ItalianPizza implements Pizza {public void prepare() {System.out.println("Preparing Italian Pizza");}public void bake() {System.out.println("Baking Italian Pizza");}public void cut() {System.out.println("Cutting Italian Pizza");}public void box() {System.out.println("Boxing Italian Pizza");}
}// 美国披萨
public class AmericanPizza implements Pizza {public void prepare() {System.out.println("Preparing American Pizza");}public void bake() {System.out.println("Baking American Pizza");}public void cut() {System.out.println("Cutting American Pizza");}public void box() {System.out.println("Boxing American Pizza");}
}

工厂接口

// 披萨工厂接口
public abstract class PizzaFactory {public abstract Pizza createPizza();public void orderPizza() {Pizza pizza = createPizza();pizza.prepare();pizza.bake();pizza.cut();pizza.box();}
}

具体工厂

// 意大利披萨工厂
public class ItalianPizzaFactory extends PizzaFactory {public Pizza createPizza() {return new ItalianPizza();}
}// 美国披萨工厂
public class AmericanPizzaFactory extends PizzaFactory {public Pizza createPizza() {return new AmericanPizza();}
}

客户端代码

public class PizzaStore {public static void main(String[] args) {PizzaFactory italianFactory = new ItalianPizzaFactory();PizzaFactory americanFactory = new AmericanPizzaFactory();italianFactory.orderPizza(); // 订购意大利披萨americanFactory.orderPizza(); // 订购美国披萨}
}

实际的使用

产品 具体的产品,工厂 具体的工厂
比如数据库驱动。对数据库的操作基本都是一致的。但是数据库的产品是不一样的,mysql oracle ,可以考虑工厂方法。

http://www.lryc.cn/news/387702.html

相关文章:

  • python API自动化(Pytest+Excel+Allure完整框架集成+yaml入门+大量响应报文处理及加解密、签名处理)
  • 【Postman学习】
  • 【Linux】IO多路复用——select,poll,epoll的概念和使用,三种模型的特点和优缺点,epoll的工作模式
  • IBCS 虚拟专线——让企业用于独立IP
  • 驾驭巨龙:Perl中大型文本文件的处理艺术
  • Kafka~特殊技术细节设计:分区机制、重平衡机制、Leader选举机制、高水位HW机制
  • springcloud-config 客户端启用服务发现client的情况下使用metadata中的username和password
  • 云计算 | 期末梳理(中)
  • pytest测试框架pytest-order插件自定义用例执行顺序
  • 吴恩达机器学习 第三课 week2 推荐算法(上)
  • MySQL CASE 表达式
  • Unity3D 游戏数据本地化存储与管理详解
  • 昇思25天学习打卡营第1天|初学教程
  • ctfshow-web入门-命令执行(web59-web65)
  • Websocket在Java中的实践——最小可行案例
  • python请求报错::requests.exceptions.ProxyError: HTTPSConnectionPool
  • 【Unity】Excel配置工具
  • 001 线性查找(lua)
  • 数据结构之链表
  • 【小工具】 Unity相机宽度适配
  • centos误删yum和python
  • WP黑格导航主题BlackCandy
  • elasticsearch底层核心组件
  • EasyExcel数据导入
  • 20240630 每日AI必读资讯
  • 第十一章 Qt的模型视图
  • 力扣 单词规律
  • 10款好用不火的PC软件,真的超好用!
  • Windows怎么实现虚拟IP
  • 【计算机网络】HTTP——基于HTTP的功能追加协议(个人笔记)