当前位置:首页 > 服务端 > 设计模式:(工厂模式)

设计模式:(工厂模式)

2022年09月17日 15:51:07服务端8

1.定义

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象
简单来说:工厂模式就是定义一个用于创建对象的接口,让子类决定实例化哪一个类。

2.概述

得到一个类的子类的实例最常用的办法就是使用new运算符和该类的构造方法,但是在某些情况下,用户可能不应该或者无法使用这种办法来得到一个子类的实例,其原因是系统不予许用户代码和该类的子类形成耦合或者用户不知道该类有哪些子类可以用。比如,有一个PenCore类(笔芯),该类是一个抽象类。假设PenCore类有三个子类,分别是RedPenCore(红笔芯),BluePenCore(蓝笔芯)和BlackPenCore(黑笔芯),而系统设计的目的是为用户提供BallPen(圆珠笔)的子类的实例,即含有笔芯的圆珠笔,也就是说系统想让用户使用BallPen类的子类的实例来得到PenCore类的子类的实例。
具体是的实现看文章后面结构的描述!

3.应用场景

1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。
2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。
3、设计一个连接服务器的框架,需要三个协议,“POP3”、“IMAP”、“HTTP”,可以把这三个作为产品类,共同实现一个接口。

4.模式的结构与使用

工厂模式的结构中一般包括四种角色:
1.抽象产品(Product):抽象类或接口,负责定义具体产品必须实现的方法!
2.具体产品(ConcreteProduct):具体产品是一个类,如果Product是一个抽象类,那么具体产品是Product的子类;如果Product是一个接口,那么具体产品就是实现Product接口的类。
3.构造者(Creator):一个接口或抽象类。构造者负责定义一个称作工厂方法的抽象方法,该方法返回具体产品类的实例。
4.具体构造者(ConcreteCreator):如果构造者是抽象类,具体构造者是构造者的子类;如果构造者是接口,具体构造者是是实现构造者接口的类。具体构造者重写工厂方法使该方法返回具体产品的实例。

1.工厂方法模式的UML类图

设计模式:(工厂模式) _ JavaClub全栈架构师技术笔记

2.工厂模式的顺序图

设计模式:(工厂模式) _ JavaClub全栈架构师技术笔记

3.结构的描述

1.抽象产品
概述中所提到的PenCore(笔芯)类是工厂模式中的Product角色,代码如下:

public abstract class PenCore {
     
    protected String color;
    public abstract void writeWord(String s);
}

2.具体产品
概述中提到的RedPenCore,BluePenCore和BlackPenCore类是三个具体的产品角色,代码如下所示:
RedPenCore.java

public class RedPenCore extends PenCore{
     
    public RedPenCore() {
     
        color="红色";
    }
    @Override
    public void writeWord(String s) {
     
        System.out.println("写出"+color+"的字:"+s);
    }
}

BluePenCore.java

public class BluePenCore extends PenCore{
     
    public BluePenCore() {
     
        color="蓝色";
    }

    @Override
    public void writeWord(String s) {
     
        System.out.println("写出"+color+"的字:"+s);
    }
}

BlackPenCore.java


public class BlackPenCore extends PenCore{
     
    public BlackPenCore() {
     
        color="黑色";
    }

    @Override
    public void writeWord(String s) {
     
        System.out.println("写出"+color+"的字:"+s);
    }
}

3.构造者
概述中提到的BallPen类是构造者(Creator)角色,代码如下所示

public abstract class BallPen {
     
    public BallPen() {
     
        System.out.println("生产了一只能装有"+getPenCore()+"笔芯的圆珠笔");
    }
    public abstract PenCore getPenCore();
}

4.具体构造者
概述中提到的RedBallPen,BlueBallPen,BlackBallPen类是具体构造者角色,代码如下所示:
RedBallPen.java

public class RedBallPen extends BallPen{
     
    @Override
    public PenCore getPenCore() {
     
        return new RedPenCore();
    }
}

BlueBallPen.java

public class BlueBallPen extends BallPen{
     
    @Override
    public PenCore getPenCore() {
     
        return new BluePenCore();
    }
}

BlackBalPen.java

public class BlackBallPen extends BallPen{
     
    @Override
    public PenCore getPenCore() {
     
        return new BlackPenCore();
    }
}

5.测试程序
Application.java

public class Application {
     
    public static void main(String[] args) {
     
        PenCore penCore;
        BallPen ballPen=new RedBallPen();
        penCore= ballPen.getPenCore();
        penCore.writeWord("我是一名Java程序员");

        ballPen=new BlueBallPen();
        penCore=ballPen.getPenCore();
        penCore.writeWord("我正在学习SpringBoot");

        ballPen=new BlackBallPen();
        penCore=ballPen.getPenCore();
        penCore.writeWord("未来我还要学习微服务");
    }
}

6.测试结果展示
设计模式:(工厂模式) _ JavaClub全栈架构师技术笔记

5.工厂模式的优点

1.使用工厂模式可以让用户的代码和某个特定类的子类的代码解耦
2.工厂方法使用用户不必知道它所使用的对象是怎样被创建的,只需要知道该对象有哪些方法即可。

作者:散一世繁华,颠半世琉璃
来源链接:https://blog.csdn.net/qq_51447436/article/details/124199151

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/42585.html

标签: 设计模式
分享给朋友:

“设计模式:(工厂模式)” 的相关文章

什么是设计模式?详解设计模式概念及几大原则

什么是设计模式?详解设计模式概念及几大原则

​ hello,各位小伙伴大家好,又到了一篇一次的斗图环节,天气冷了,各位注意保暖。 今天我们来讲讲设计模式,在我们学习Java的时候,时常听到单例模式,多例模式,还有使用Spring的时候,默认采用的单例模式,你所听到的“饱汉式”、“饿汉式”,都是对设计模式的形容。那么什么是设计模式呢?...

常用设计模式系列(二)—工厂方法模式

常用设计模式系列(二)—工厂方法模式

一、前言 hello各位小伙伴好,天气贼冷,多冻手,但是还是不能降低我编写设计模式讲解的热情。设计模式的魅力就像那冬天里的一把火,怎么也浇不灭; 上期讲解了简单工厂模式的应用场景及优缺点分析,今天开始我们的设计模式第二弹——工厂方法模式,其实工厂方法模式类似于简单工厂模式的一个升级...

常用设计模式系列(三)—抽象工厂模式

常用设计模式系列(三)—抽象工厂模式

一、前言 各位大佬好,又是一个冷嗖嗖的日子,这个城市的天气最近一直都不太好,说下雪吧也不下,天气也不晴,让人甚是难受。前段时间周围的城市都下雪了,盼了好久的雪也没盼到,只等来了冷风作祟。基于我的心情,我来吟诗一首: ​ 《盼雪》 昨日已别大雪, 吾昼夜盼雪至。...

炒冷饭系列:设计模式 工厂方法模式

炒冷饭系列:设计模式 工厂方法模式

炒冷饭系列:设计模式 工厂方法模式 摘要: 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 事虽险,吾善为;苟擅为,子道亏。物虽小,勿私藏;苟...

设计模式-桥接模式

设计模式-桥接模式

定义 将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。 角色 抽象化(Abstraction)角色:定义抽象类,并包含一个对实现化对象的引用。 扩展抽象化...

设计模式面试|Java面试题

1.请列举出在 JDK 中几个常用的设计模式?  单例模式(Singleton pattern)用于 Runtime,Calendar 和其他的一些类中。工厂模式 (Factory pattern)被用于各种不可变的类如 Boolean,像 Boolea...

IOS设计模式之三:MVC模式

IOS设计模式之三:MVC模式

提到ios中的mvc不得不提2011秋季斯坦福课程的老头,他的iphone开发公开课是所有描述ios中mvc模式最为准确并且最为浅显易懂的。 模型-视图-控制器 这个模式其实应该叫做MCV,用控制器把model与view隔开才对,也就是model与view互相不知道对方的存...

java多线程12种设计模式

1、Single Threaded Execution Pattern(单线程执行模式) 2、Immutable Pattern(不可变模式) 3、Guarded Suspension Pattern(防卫暂停模式) 4、Balking Pattern(止步模式...

SpringMVC的设计模式是什么?

SpringMVC的设计模式是什么?

SpringMVC设计模式是一种通用的软件编程思想。 在SpringMVC设计模式中认为, 任何软件都可以分为三部分组成: 1.控制程序流转的控制器(Controller) 2.封装数据处理数据的模型(Model) 3.负责展示数据的视图(view)...

Java设计模式面试题及答案(持续更新。。。)

Java面试题及答案(2022版),每道都是认真筛选出的高频面试题,助力大家能找到满意的工作! Java设计模式面试题及答案 下载链接:全部面试题及答案PDF 1.请列举出在 JDK 中几个常用的设计模式? 单例模式(Single...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。