设计模式:工厂方法模式和策略模式

工厂方法模式

什么是开闭原则?

开闭原则是扩展开发,对修改关闭

  • 简单工厂(不是设计模式而是一种编程的习惯 )

有三个角色

  1. 抽象产品:定义了产品的规范,描述了产品的特性和功能.
  2. 具体产品:实现或者继承抽象产品的子类
  3. 具体工厂:提供了创建产品的方法,调用者通过该方法获取产品

实例:

由工厂类来创建对象

创建了工厂对象来调用创建方法

但是这样会留下问题:

coffeStore和当前工厂的耦合, 工厂与Coffee实现类的耦合

后期如果再加入新品种的咖啡 还是需要修改SimpleCoffeeFactory 违反了开闭原则

工厂方法模式

根据参数的不同,返回不同类的实例,简单工厂模式专门负责定义一个类 工厂类来负责创建其他类的实例,被创建的实例通常都是具有共同的父类。

优点 :实现对象的创建和使用分离,创建完全交给专门的工厂类负责,不用关心怎么创建的,只需要关心如何去使用。

达到对象解耦 的目的

优点:在增加新的产品的时候只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改 ,满足开闭原则
缺点 :每增加一个产品就需要增加一个具体的产品类 和一个对应的具体工厂类 ,增加了系统的复杂度

  • 抽象工厂:提供创建产品的接口,调用者通过访问具体工厂的方法来创建产品
  • 具体工厂:主要是实现抽象工厂中的抽象方法,完成具体产品的创建
  • 抽象产品:定义产品的规范,描述产品主要的特性和功能
  • 具体产品:实现了抽象产品角色所定义的接口 ,由具体工厂来创建,与具体工厂一一对应

不同的工厂去创建不同的产品


策略模式

  • 定义了一系列算法,并且将每个算法封装起来,使他们可以互相替换,且算法的变化不会影响使用算法的客户
  • 主要是对算法进行封装 ,把使用算法的责任和算法的实现分隔开,委派不同的对象对这些算法进行管理

举例:

你去洗衣服的时候,支持洗衣的算法 标准 ,快洗 ,大物

洗衣服的算法都属于策略。即机器应对在不同的场景有不同的行为

定义一种算法,将每个算法都封装起来,并且使他们直接可以互替换。策略模式让算法独立于使用它的客户而改变。

客户不用关心算法的逻辑,只关注具体的行为项


相关推荐
nnsix10 小时前
设计模式 - 建造者模式 笔记
笔记·设计模式·建造者模式
cui178756811 小时前
矩阵拼团 + 复购拼团:新零售最稳的复购模式,规则简单
大数据·人工智能·设计模式·零售
百珏11 小时前
[灰度发布]:全链路透传组件:APM、自研方案与 Java Agent 的实现取舍
后端·设计模式·架构
likerhood13 小时前
设计模式 · 享元模式(Flyweight Pattern)java
java·设计模式·享元模式
AI大法师14 小时前
从 Adobe 焕新看品牌系统升级:Logo、主色、字体与产品体验如何重新对齐
大数据·人工智能·adobe·设计模式
贵慜_Derek14 小时前
《从零实现 Agent 系统》连载 03|控制循环:感知—决策—行动—反思
人工智能·设计模式·架构
nnsix15 小时前
设计模式 - 原型模式 笔记
笔记·设计模式·原型模式
nnsix15 小时前
设计模式 - 适配器模式 笔记
笔记·设计模式·适配器模式
asdfg125896315 小时前
一文理解软件开发中的“设计模式”
java·设计模式·软件开发
云飞云共享云桌面16 小时前
SolidWorks 服务器通过云飞云共享云桌面10人研发共享方案
运维·服务器·3d·设计模式·电脑