文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

工厂方法模式介绍

2023-08-30 16:55

关注

韩敬海 设计模式(Java版)

(一)定义

定义一个创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。
工厂方法涉及的角色有:
1 .抽象工厂角色:工厂方法模式的核心,与应用系统无关,任何创建对象的工厂类必须实现这个接口。
2. 具体工厂角色:实现了抽象工厂接口,被应用程序调用以创建产品对象。
3. 抽象产品角色:定义产品的共性,实现对产品抽象的定义。
4. 具体产品角色:实现抽象产品角色所声明的接口。

(二)类图

在这里插入图片描述

(二)代码实现

1. 抽象工厂角色

package com.xiaobai.design_pattern.factorymethod.createrole;import com.xiaobai.design_pattern.factorymethod.productrole.Cake;public interface Creator {    Cake factory();}

2. 抽象产品角色

package com.xiaobai.design_pattern.factorymethod.productrole;public interface Cake {        void make();}

3. 具体工厂角色

(1)苹果蛋糕生成工厂
package com.xiaobai.design_pattern.factorymethod.createrole;import com.xiaobai.design_pattern.factorymethod.productrole.AppleCake;import com.xiaobai.design_pattern.factorymethod.productrole.Cake;public class AppleCakeCreator implements Creator{    @Override    public Cake factory() {        return new AppleCake();    }}
(2)草莓蛋糕生成工厂
package com.xiaobai.design_pattern.factorymethod.createrole;import com.xiaobai.design_pattern.factorymethod.productrole.Cake;import com.xiaobai.design_pattern.factorymethod.productrole.StrawberryCake;public class StrawberryCakeCreator implements Creator{    @Override    public Cake factory() {        return new StrawberryCake();    }}

4. 具体产品角色

(1)苹果蛋糕
package com.xiaobai.design_pattern.factorymethod.productrole;import lombok.extern.slf4j.Slf4j;@Slf4jpublic class AppleCake implements Cake{    @Override    public void make() {            log.info("正在制作苹果蛋糕");    }}
(2)草莓蛋糕
package com.xiaobai.design_pattern.factorymethod.productrole;import lombok.extern.slf4j.Slf4j;@Slf4jpublic class StrawberryCake implements Cake {    @Override    public void make() {        log.info("正在制作草莓蛋糕");    }}

5. 测试

package com.xiaobai.design_pattern.factorymethod;import com.xiaobai.design_pattern.factorymethod.createrole.AppleCakeCreator;import com.xiaobai.design_pattern.factorymethod.createrole.Creator;import com.xiaobai.design_pattern.factorymethod.createrole.StrawberryCakeCreator;import com.xiaobai.design_pattern.factorymethod.productrole.AppleCake;import com.xiaobai.design_pattern.factorymethod.productrole.Cake;import org.junit.jupiter.api.Test;public class FactoryMethodTest {    @Test    public void test() {        // 草莓蛋糕生成        Creator creator1 = new StrawberryCakeCreator();        Cake strawberryCake = creator1.factory();        strawberryCake.make();        // 苹果蛋糕生成        Creator creator2 = new AppleCakeCreator();        Cake appleCake = creator2.factory();        appleCake.make();    }}

输出:

45.924 [main] INFO com.xiaobai.design_pattern.factorymethod.productrole.StrawberryCake - 正在制作草莓蛋糕
22:58:45.929 [main] INFO com.xiaobai.design_pattern.factorymethod.productrole.AppleCake - 正在制作苹果蛋糕

(三)总结

1. 工厂方法模式优点

(1)提高扩展性:在增加产品类的情况下,只要适当调整具体的工厂类或扩展一个工厂类,就可以适应变化。
在这里插入图片描述

(2)调用者不需要关心产品的具体实现,只需要关注产品的接口是否发生变化,因为产品的实例化是由工厂负责的。
(3)解耦:高层模块只需要知道产品的抽象类,不需要关注产品的实现类,符合迪米特法则、依赖倒置原则、里氏替换原则。

来源地址:https://blog.csdn.net/qq_39464523/article/details/132032194

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-人工智能
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯