【JAVA长虹键法】第四式 普通工厂模式(23种设计模式)_长虹剑法 设计模式

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:xhs1999xhs (备注Java)
img

正文

🔎这里是JAVA长虹键法,关注我学习JAVA不迷路
👍如果对你有帮助,给博主一个免费的点赞以示鼓励
欢迎各位🔎点赞👍评论收藏⭐️

🗡专栏介绍

【JAVA长虹键法】 主要讲了23种设计模式,本系列专栏会以虹猫蓝兔七侠传的故事为例来给大家详细分析所有模式,希望能给大家带来帮助!

🗡本期介绍

模式: 普通工厂模式
案例: 一个天外陨石(抽象产品),七剑(产品)
一个铸剑传承(抽象工厂),两个铸剑师(工厂)
男铸剑师负责铸造至阳之剑(长虹剑、青光剑、奔雷剑、旋风剑、雨花剑)
女铸剑师负责铸造至阴之剑(冰魄剑、紫云剑)

文章目录

在这里插入图片描述

👀什么是工厂模式

在《【JAVA长虹键法】第三式 简单工厂模式》一期中我们介绍了简单工厂模式,提到了简单工厂模式违背了开闭原则,而“工厂方法模式”是对简单工厂模式的进一步抽象化,其好处是可以使系统在不修改原来代码的情况下引进新的产品,即满足开闭原则。

🗡优点

1、用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程。
2、灵活性增强,对于新产品的创建,只需多写一个相应的工厂类。
3、典型的解耦框架。高层模块只需要知道产品的抽象类,无须关心其他实现类,满足迪米特法则、依赖倒置原则和里氏替换原则。

🗡缺点

1、类的个数容易过多,增加复杂度
2、增加了系统的抽象性和理解难度
3、抽象产品只能生产一种产品,此弊端可使用抽象工厂模式解决。

🗡应用场景

1、客户只知道创建产品的工厂名,而不知道具体的产品名。如 TCL 电视工厂、海信电视工厂等。
2、创建对象的任务由多个具体子工厂中的某一个完成,而抽象工厂只提供创建产品的接口。
3、客户不关心创建产品的细节,只关心产品的品牌

👀普通工厂的实现

案例的主要角色如下:
抽象工厂(Abstract Factory):铸剑传承
工厂(SimpleFactory):男铸剑师、女铸剑师
抽象产品(Product):天外陨石(铸剑的原材料)
具体产品(ConcreteProduct):长虹剑、青光剑、奔雷剑、旋风剑、雨花剑、冰魄剑、紫云剑

案例:
七剑分阴阳,长虹剑、青光剑、奔雷剑、旋风剑、雨花剑属至阳之剑。
冰魄剑、紫云剑属至阴之剑。
男铸剑师传承了打造至阳之剑的方法,女铸剑师传承了打造至阴之剑的方法。
七侠分别找两位铸剑师打造属于自己的剑

🗡抽象产品、产品

Ss接口(天外陨石):

接口内声明了一个方法

public interface Ss {
    void show();
}

Aa类实现接口Ss(长虹剑):

实现Ss接口

public class Aa implements Ss {
    @Override
    public void show() {
        System.out.println("打造了一把长虹剑");

    }
}

Bb类实现接口Ss(冰魄剑):

实现Ss接口

public class Bb implements Ss {
    @Override
    public void show() {
        System.out.println("打造了一把冰魄剑");

    }
}

Cc类实现接口Ss(紫云剑):

实现Ss接口

public class Cc implements Ss {
    @Override
    public void show() {
        System.out.println("打造了一把紫云剑");
    }
}

Dd类实现接口Ss(雨花剑):

实现Ss接口

public class Dd implements Ss {
    @Override
    public void show() {
        System.out.println("打造了一把紫云剑");
    }
}

Ee类实现接口Ss(青光剑):

实现Ss接口

public class Ee implements Ss {
    @Override
    public void show() {
        System.out.println("打造了一把紫云剑");
    }
}

Ff类实现接口Ss(奔雷剑):

实现Ss接口

public class Ff implements Ss {
    @Override
    public void show() {
        System.out.println("打造了一把紫云剑");
    }
}

Gg类实现接口Ss(旋风剑):

实现Ss接口

public class Gg implements Ss {
    @Override
    public void show() {
        System.out.println("打造了一把紫云剑");
    }
}

🗡抽象工厂、工厂

Zz接口(铸剑传承):

接口内声明了一个铸剑方法abc()

public interface Zz {
    Ss abc(String a);
}


Nan类实现接口Zz(男铸剑师):

实现Zz接口

public class Nan implements Zz {
    private static Ss ss;

    public Ss abc(String a) {
        if ("长虹剑".equals(a)) {
            ss = new Aa();
        } else if ("奔雷剑".equals(a)) {
            ss = new Ff();
        } else if ("青光剑".equals(a)) {
            ss = new Ee();
        } else if ("雨花剑".equals(a)) {
            ss = new Dd();
        } else if ("旋风剑".equals(a)) {
            ss = new Gg();
        } else {
            System.out.println("铸剑失败");
        }
        return ss;
    }
}


Nv类实现接口Zz(女铸剑师):

实现Zz接口

public class Nv implements Zz {
    private static Ss ss;

    public Ss abc(String a) {
        if ("冰魄剑".equals(a)) {
            ss = new Bb();
        } else if ("紫云剑".equals(a)) {
            ss = new Cc();
        } else {
            System.out.println("铸剑失败");
        }
        return ss;
    }
}

🗡测试

测试类:

public class Demo {
    public static void main(String[] args) {
        System.out.println("---------至阳之剑-------------");
        //男铸剑师
        Nan nan = new Nan();
        Ss aa = nan.abc("长虹剑");
        Ss dd = nan.abc("雨花剑");
        Ss ee = nan.abc("青光剑");
        Ss ff = nan.abc("奔雷剑");
        Ss gg = nan.abc("旋风剑");
        aa.show();
        dd.show();
        ee.show();
        ff.show();
        gg.show();
        System.out.println("---------至阴之剑-------------");
        //女铸剑师
        Nv nv = new Nv();
        Ss bb = nv.abc("冰魄剑");
        Ss cc = nv.abc("紫云剑");
        bb.show();
        cc.show();
    }
}

在这里插入图片描述

下期预告

模式: 抽象工厂模式
案例: 七侠师傅和师母为七侠打造七剑和培养小灵鸽
在这里插入图片描述

2021年Java中高级面试必备知识点总结

在这个部分总结了2019年到目前为止Java常见面试问题,取其面试核心编写成这份文档笔记,从中分析面试官的心理,摸清面试官的“套路”,可以说搞定90%以上的Java中高级面试没一点难度。

本节总结的内容涵盖了:消息队列、Redis缓存、分库分表、读写分离、设计高并发系统、分布式系统、高可用系统、SpringCloud微服务架构等一系列互联网主流高级技术的知识点。

目录:

(上述只是一个整体目录大纲,每个点里面都有如下所示的详细内容,从面试问题——分析面试官心理——剖析面试题——完美解答的一个过程)

部分内容:

对于每一个做技术的来说,学习是不能停止的,小编把2019年到目前为止Java的核心知识提炼出来了,无论你现在是处于什么阶段,如你所见,这份文档的内容无论是对于你找面试工作还是提升技术广度深度都是完美的。

不想被后浪淘汰的话,赶紧搞起来吧,高清完整版一共是888页,需要的话可以点赞+关注

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:xhs1999xhs (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img-5DRqSJQx-1713681995691)]

[外链图片转存中…(img-BkqQlvIe-1713681995691)]

对于每一个做技术的来说,学习是不能停止的,小编把2019年到目前为止Java的核心知识提炼出来了,无论你现在是处于什么阶段,如你所见,这份文档的内容无论是对于你找面试工作还是提升技术广度深度都是完美的。

不想被后浪淘汰的话,赶紧搞起来吧,高清完整版一共是888页,需要的话可以点赞+关注

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:xhs1999xhs (备注Java)
[外链图片转存中…(img-7Dp57ekB-1713681995691)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 25
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值