工厂模式理解了没有?

【局部规划模块轨迹优化算法】Teb_planner规划算法 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对****做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容由于ROS中的局部路径规划器比较老了,所以我推荐大家使用比较新的局部路径规划器teb_local_planner。teb_local_planner是基于弹性时间带碰撞约束的算法,算法将动态障碍物、运行时效、路径平滑性等约束做综合考虑,在复杂环境下有更优秀的表现。 阅读详情

前言

只有光头才能变强

回顾前面:

昨天写了单例模式了,今天是时候写工厂模式啦~

工厂模式我个人认为其实比较难理解的,如果有接触过|听过|见过该模式的同学很可能就会想:我自己new一个对象出来就好了,简单快捷。用得着你这个工厂模式吗?搞一个工厂出来还要写一大堆的代码呢~

网上的很多资料都是在阐述着:工厂模式的好处就是解耦。相信大家对解耦这个词也不陌生,那解耦究竟有什么好处呢?

本文章试图去解释为什么要用工厂模式,用了工厂模式的好处是什么,以及工厂模式衍生出的三种形式究竟有什么区别~~

那么接下来就开始吧,如果有错的地方希望能多多包涵,并不吝在评论区指正!

一、工厂模式概述

在《设计模式之禅》这本书中分了两章节讲工厂模式:

  • 工厂方法模式
    • (ps:其中里面讲到了简单工厂模式)
  • 抽象工厂模式

网上的大部分资料都是将工厂模式分成三种:

  • 简单/静态工厂模式
  • 工厂方法模式
  • 抽象工厂模式

看完上面的叙述是不是想打死我,什么鸟玩意?不急哈,下面我会一一讲到~~

1.1为什么要用工厂模式?

想想我们为什么要用工厂模式?下面我就简单举例子:

文件IO的操作我们会经常用得到吧,所以BufferedReader对象经常要创建的:


    // 创建一个BufferedReader对象
    BufferedReader bf = new BufferedReader(new FileReader(new File("aa.txt")));

你说麻烦吗?其实也不麻烦,就一行代码嘛,哪里麻烦了~如果不太熟悉IO流的同学就没有那么机灵了,创建一个BufferedReader可能就是以下的代码了:


        File file = new File("aa.txt");
        FileReader fileReader = new FileReader(file);
        BufferedReader bufferedReader = new BufferedReader(fileReader);

你说麻烦吗?其实也不麻烦,不就是三行代码嘛,哪里麻烦了~如果这个应用**很多的类上都用到了**BufferedReader对象的话,那每个类都写上这三行代码了。那你说麻烦吗?那肯定麻烦啊,还用想啊….

可以看出来,创建一个BufferReader对象里面需要一个FileReader对象,而FileReader对象又要File对象。那创建这个BufferReader对象还是比较麻烦的(代码上看不麻烦,从构造上看还是挺麻烦的)!

虽然比较麻烦,但我们还能用,能用就行!于是乎,我们就去写代码了,现在有三个类都要进行文件的读写操作,于是他们就有这样的代码:


public class FileOperateA {

    public static void main(String[] args) throws FileNotFoundException {
        File file = new File("aa.txt");
        FileReader fileReader = new FileReader(file);
        BufferedReader bufferedReader = new BufferedReader(fileReader);


        // 读写文件....
    }
}

此时:上头说,我要换成LineNumberReader来读写,有这个需求!那我们作为一个写代码的,能怎么办?很绝望也需要去完成呀。

  • 不熟悉IDE的小伙子就一个一个将BufferedReader改成LineNumberReader,现在就3个类用到了BufferedReader,也就改6次而已。(ps:那如果很多地方都用到了呢?)
  • 熟悉IDE的小伙子就全局替换重构,妥妥的!

哎,写个代码屁事真多…那有没有一种方法能够让创建对象变得简单而且修改对象时能很方便呢?

  • 哎,工厂模式就行了。

再说从面向对象的角度来看:我一个操作文件的类还要我会创建BufferReader是不是有点过分了?(职责没有分工好)

  • 交给工厂来创建对象这就很面向对象了!

1.2体验工厂模式

何为工厂?将我们的产品都交由工厂来生产!我现在用的iphone5s,从哪来?从富士康组装而来,富士康是工厂。我用得着知道iphone5s在富士康是怎么组装起来的吗?不需要。

来,我们来改造一下上面的例子。首先我们创建一个工厂类,它可以生产Reader对象!


// 创建Reader对象的工厂
public class ReaderFactory {
    public static Reader getReader() throws FileNotFoundException {
        File file = new File("aa.txt");
        FileReader fileReader = new FileReader(file);
        BufferedReader reader = new BufferedReader(fileReader);
        return reader;
    }
}

那么我们要得到BufferReader对象就贼简单了:


public class FileOperateA {

    public static void main(String[] args) throws FileNotFoundException {


        //-------我有工厂了,还用自己搞吗?不用了!
        //File file = new File("aa.txt");
        //FileReader fileReader = new FileReader(file);
        //BufferedReader bufferedReader = new BufferedReader(fileReader);
        //-------我有工厂了,还用自己搞吗?不用了!

        // 用工厂来创建出对象
        Reader reader = ReaderFactory.getReader();

        // 读写文件....
    }
}

工厂将我们创建的对象过程给屏蔽了!

此时我要改成LineNumberReader怎么玩?在工厂上改一下就好了:

我们的调用方FileOperateA|FileOperateB|FileOperateC这些类完全就不用变!

1.3使用工厂方法的好处

从上面的工厂模式体验我们就可以看到:

  • 我们修改了具体的实现类,对客户端(调用方)而言是完全不用修改的。
  • 如果我们使用new的方式来创建对象的话,那么我们就说:new出来的这个对象和当前客户端(调用方)耦合了!
    • 也就是,当前客户端(调用方)依赖着这个new出来的对象!

这就是解耦的好处!

我再放下我之前练习的时候写过的代码吧:

我有一个DaoFactory,逻辑很简单就是专门创建Dao对象的~

那么在Service层就可以使用工厂将想要的Dao对象初始化了~

此时我们的Service与Dao的对象低耦合的~

  • 大家可能看不出有什么好处,还弄了一大堆的字符串啥的~~

在Service与Controller层我也弄了一个ServiceFactory,根据当时业务的需要(添加权限),我创建Service时就非常灵活了:

二、如何使用工厂模式

在一开始我就说了,工厂模式可以分成三类:

  • 简单/静态工厂模式
  • 工厂方法模式
  • 抽象工厂模式

下面我就逐一来介绍一下每一种工厂模式有什么不一样~

三种模式都以:Java3y要买宠物的例子来讲解~

2.1工厂方法模式

很多博客都是以简单/静态工厂模式,工厂方法模式,抽象工厂模式这个顺序来讲解工厂模式的。我认为按书上的顺序比较好理解~因为简单/静态工厂模式是在工厂方法模式上缩减,抽象工厂模式是在工厂方法模式上再增强。

  • 所以我就先讲工厂方法模式了。

Java3y每天写代码很无聊,想要买只宠物来陪陪自己。于是乎就去宠物店看宠物啦~~~

作为一间宠物店,号称什么宠物都有!于是乎,店主宣传的时候就说:我的宠物店什么宠物都有!

于是构建宠物的工厂就诞生了~


// 号称什么宠物都有
public interface AnimalFactory {

    // 可以获取任何的宠物
    Animal createAnimal();
}

当然了,主流的宠物得进货一些先放在店里充充门面,一些特殊的宠物就告诉顾客要时间进货~

  • 所以,我们就有了构建猫和狗的工厂(继承着所有宠物的工厂)

猫工厂:


// 继承着宠物工厂
public class CatFactory implements AnimalFactory {
    @Override
    // 创建猫
    public Animal createAnimal() {
        return new Cat();
    }

}

狗工厂也是一样的:


// 继承着宠物工厂
public class DogFactory implements AnimalFactory {

    // 创建狗
    @Override
    public Animal createAnimal() {
        return new Dog();
    }

}

嗯,还有我们的实体类:猫、狗、动物(多态:猫和狗都是动物,可以直接用动物来表示了)

动物实体类:


public abstract class Animal {

    // 所有的动物都会吃东西
    public abstract void eat();
}

猫实体类:


public class Cat extends Animal {

    // 猫喜欢吃鱼
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }

}

狗实体类:


public class Dog extends Animal {

    // 狗喜欢吃肉
    @Override
    public void eat() {
        System.out.println("狗吃肉");
    }

}

那么现在Java3y想要一只狗,跟了宠物店老板说,宠物店老板就去找狗回来了:


    // 去找狗工厂拿一只狗过来
    AnimalFactory f = new DogFactory();

    // 店主就拿到了一只狗给Java3y
    Animal a = f.createAnimal();
    a.eat();
    System.out.println("关注公众号:Java3y");

那么现在Java3y想要一只猫,跟了宠物店老板说,宠物店老板就去找猫回来了:


    // 去找猫工厂拿一只猫过来
    AnimalFactory ff = new CatFactory();

    // 店主就拿到了一只猫给Java3y
    Animal aa = ff.createAnimal();
    aa.eat();
    System.out.println("关注公众号:Java3y");

如果这个时候Java3y说想要一只蜥蜴怎么办啊?没问题啊,店主搞个蜥蜴工厂就好了~~


        // 要买蜥蜴..
        AnimalFactory fff = new LizardFactory();
        Animal aaa = ff.createAnimal();
        aaa.eat();

优点:

  • 1:客户端不需要在负责对象的创建,明确了各个类的职责
  • 2:如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可
  • 3:不会影响已有的代码,后期维护容易,增强系统的扩展性

缺点:

  • 1:需要额外的编写代码,增加了工作量

工厂方法类图:

2.2简单/静态工厂模式

现在宠物店生意不好做啊,号称“什么宠物都有”,这吹过头了~~于是店主只卖两种常见的宠物了。

  • 既然就只有两种宠物的话,那就没必要有”猫厂“、”狗厂“了,一个猫狗厂就行了!

所以我们的工厂是这样子的:


public class AnimalFactory {
    public static Dog createDog() {
        return new Dog();
    }

    public static Cat createCat() {
        return new Cat();
    }


    // 外界想要猫要狗,这里创建就好了
    public static Animal createAnimal(String type) {
        if ("dog".equals(type)) {
            return new Dog();
        } else if ("cat".equals(type)) {
            return new Cat();
        } else {
            return null;
        }
    }
}

三个实体还是没变(动物、猫、狗)….

那么Java3y去宠物店买猫狗的时候,告诉老板我要猫、我要狗:


        // 拿到狗
        Animal A = AnimalFactory.createAnimal("dog");
        A.eat();

        // 拿到猫
        Animal C = AnimalFactory.createAnimal("cat");
        C.eat();

现在问题来了:

  • 1:我想要一个猪,可是我的工厂类没有猪
  • 2:我就去改代码,写可以创建猪对象的
  • 3:接着,我又要其他的动物
  • 4:我还是得改代码
  • 5……………….
  • 6:这就是简单工厂类的缺点:当需求改变了,我就要改代码.

简单工厂类的优点也很明显:我就一个具体的工厂来创建对象,代码量少。

2.3抽象工厂模式

抽象工厂模式就比较复杂了,我们一般的应用都写不到。我首先来简述一下需求吧:

  • 现在非常流行在猫狗届也吹起了一股“性别风”
    • 有的喜欢公的
    • 有的喜欢母的

那我们的猫和狗都是有性别的,不是公的就是母的~~

  • 我们之前在工厂方法模式下是每个动物都开一个工厂,如果动物过多的话,那么就有很多的工厂~
  • 那现在我们可以抽取出来:每个动物不是公的就是母的~
  • 所以我们有两个工厂就足够了!

具体的代码是这样的:

我们的最大工厂还是定义了创建什么动物


public interface AnimalFactory {
    Animal createDog();
    Animal createCat();
}

创建母猫和母狗的工厂:


public class FemaleAnimalFactory implements AnimalFactory {

    // 生产母狗和母猫
    @Override
    public Animal createDog() {
        return  new FemaleDog();
    }

    @Override
    public Animal createCat() {
        return new FemaleCat();
    }

}

创建公猫和公狗的工厂:


public class MaleAnimalFactory implements AnimalFactory {

    // 生产公狗和公猫

    @Override
    public Animal createDog() {
        return new MaleDog();
    }

    @Override
    public Animal createCat() {
        return new MaleCat();
    }

}

这是所有动物都拥有的普遍行为:


public abstract class Animal {

    // 所有的动物都会吃东西
    public abstract void eat();

    // 所有的动物都有性别
    public abstract void gender();
}

这是猫都拥有的普遍行为:


public abstract class Cat extends Animal {
    // 猫喜欢吃鱼
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}

这是狗都拥有的普遍行为:

public abstract class Dog extends Animal {

    // 狗喜欢吃肉
    @Override
    public void eat() {
        System.out.println("狗吃肉");
    }

}

猫分为公猫、母猫。狗分为公狗和母狗:

public class FemaleCat extends Cat {

    public void gender() {
        System.out.println("I am a female Cat");
    }

}

…..

简单来说:工厂方法模式的工厂是创建出一种产品,而抽象工厂是创建出一类产品。

  • 一类的产品我们称之为产品族。
    • 猫是一类的,狗也是一类的。所以AnimalFactory定义了两类产品—>Animal createDog();和Animal createCat();
  • 产品的继承结构称之为产品等级。
    • 所有的动物都是会吃东西的,它们都是有性别的,这是最普遍的。所以Animal定义了两个抽象方法:public abstract void eat();和public abstract void gender();
    • 所有的狗都是会吃肉的,所以Dog实现了eat()方法
      • 狗又分成了公狗和母狗,所以定义了两个类FemaleDog和MaleDog继承了Dog,实现了gender()方法
    • 所有的猫都是会吃鱼的,所以Cat实现了eat()方法
      • 猫又分成了公猫和母猫,所以定义了两个类FemaleCat和MaleCat继承了Cat,实现了gender()方法
  • 具体的工厂是面向多个产品等级结构进行生产。
    • 所以FemaleAnimalFactory定义了createDog()和createCat()生产母狗和母猫
    • 所以MaleAnimalFactory定义了createDog()和createCat()生产公狗和共猫
  • 找到母工厂就可以创建母猫和母狗,找到公工厂就可以创建公猫和公狗


    public static void main(String[] args) {


        // 需要性别为母的就去找母工厂
        AnimalFactory af = new FemaleAnimalFactory();

        // 需要一只母猫
        af.createCat().gender();

        // 需要一只母狗
        af.createDog().gender();

        System.out.println("-------------关注公众号:Java3y-------------------------");

        // 需要性别为公的就去找公工厂
        AnimalFactory aff = new MaleAnimalFactory();

        // 需要一只公狗
        aff.createDog().gender();

        // 需要一只公猫
        aff.createCat().gender();

    }

效果:

这是抽象工厂模式的类图:

抽象工厂模式说到底就是多了一层抽象,减少了工厂的数量。

抽象工厂缺点也很明显:

  • 难以扩展产品族—>如果我再要宠物猪的话
    • 那我要修改AnimalFactory、FemaleAnimalFactory、MaleAnimalFactory这些类了~

三、总结

总的来说我们用简单工厂模式比较多,工厂方式模式的话代码量会比较大,抽象工厂模式的话需要业务比较大的情况下才会用到(如果有更好的理解方式不妨在评论区留言,一起交流交流涨涨见识~~)

  • 工厂模式配合反射来使用也是极好的~

参考资料:

如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章,想要获取更多的Java资源的同学,可以关注微信公众号:Java3y。为了大家方便,刚新建了一下qq群:742919422,大家也可以去交流交流。谢谢支持了!希望能多介绍给其他有需要的朋友

文章的目录导航:

【异常】Openclaw Gateway进程异常停止问题分析与解决方案 本文分析了Gateway服务异常停止的问题,提出了三种解决方案。核心问题是缺乏进程守护和自动恢复机制,导致服务崩溃后无法自行重启。推荐方案是使用PM2进程管理工具(方案1),提供进程监控、自动重启和开机自启功能。替代方案包括自定义守护脚本(方案2)和supervisord管理(方案3)。这些方案都能有效解决当前服务脆弱性问题,显著提升服务可用性,其中PM2方案成熟度高、配置简单,是首选解决方案。实施后可将服务从人工干预转变为自动恢复,确保业务连续性。 阅读详情

相关推荐

ETL数据集成案例

一个典型的ETL数据集成案例是将多个来源的数据合并成一个数据集。假设有一个公司,该公司使用一些不同的系统来存储不同部门的数据,例如销售数据存储在一个CRM系统中,财务数据存储在一个ERP系统中,人力资源数据存储在一个HR系统中。为了更好地进行报告和分析,该公司决定将所有这些数据集成到一个数据仓库中。以下是实现这一目标的ETL过程的步骤:提取(Extract):首先,需要从每个系统中提取所需的数据。每个系统可能有不同的数据格式和结构,因此需要编写不同的提取程序或查询来提取数据。

runqu的博客 948

factory模式 java_Java工厂模式(Factory模式)

工厂模式定义:提供创建对象的接口。为何使用工厂模式工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑实用工厂模式,虽然这样做,...

weixin_28872283的博客 564

ExoPlayer硬解码实战:如何绕过系统默认软解码提升播放性能(附完整代码)

本文深入剖析了ExoPlayer默认解码器选择机制的不确定性,并提供了通过自定义MediaCodecSelector强制启用硬解码的完整实战方案。该方案能有效解决因软解码导致的播放卡顿、黑屏花屏及高功耗问题,显著提升Android应用在各种设备上的视频播放性能与稳定性。

weixin_29295541的博客 456

Java——》谈谈你对工厂模式的理解

一、工厂模式的作用 作用:帮助我们 创建对象 二、工厂模式的分类 根据需要创建的对象的复杂度,可以把工厂模式分为 简单工厂 、 工厂方法 、抽象工厂。 1、简单工厂 只有一个工厂,根据不同的参数而返回不同的实例 专门定义一个类,负责创建其他类的实例 被创建的实例通常都具有共同的父类 /** * 简单工厂 */ public class SimpleFactory { public static void main(String[] args) { // 根据对应的类型返回相

小仙~ 360

小米路由器安装Misstar tools 和MIXBOX

1.该教程适用于如下路由器: 小米路由器1代硬盘版(R1D) 小米路由器mini(R1CM) 全新小米路由器硬盘版(R2D) 小米路由器3(R3) 小米路由器3G(R3G) 小米路由器Pro(R3P) 小米路由器HD(R3D) 2.Misstar2.0在线安装 方法如下: 1.根据路由器对应文件解压文件,把解压目录(比如小米3路由器为R3)和offline_install.sh到U盘根目录,并插入路由器 2.ssh登录后,cd到U盘的目录,比如小米3路...

wybarcelona的博客 2万+

【WorkBuddy】WorkBuddy 智能体快速上手:从零到一的实践指南

文章摘要: 传统自动化脚本难以应对灵活多变的自然语言需求,导致逻辑复杂、维护成本高。智能体(Agent)通过理解语义意图、动态决策和松耦合组件解决了这些问题。WorkBuddy采用声明式配置,通过可视化界面定义意图、实体和对话策略,无需编码即可快速构建智能体。其核心组件包括意图分类、实体提取、对话策略、故事样本和回退机制,适用于客服支持、知识问答等高频场景。通过环境准备(Python/Node.js/Redis)和简单配置,用户可以快速搭建可运行的智能体,显著提升自动化效率。

ruiqideng的博客 1651

今天在知乎上看到一边关于工厂模式的文章,在这里给大家分享下

1.1为什么要用工厂模式?想想我们为什么要用工厂模式?下面我就简单举例子:文件IO的操作我们会经常用得到吧,所以BufferedReader对象经常要创建的:// 创建一个BufferedReader对象 BufferedReader bf = new BufferedReader(new FileReader(new File("aa.txt"))); 你说麻烦吗?其实也不麻烦,就一行代码嘛,哪里麻烦了~如果不太熟悉IO流的同学就没有那么机灵了,创建一个BufferedReader可能就是以下的

weixin_45942124的博客 2080

第18届全国大学生智能汽车竞赛四轮车控制策略深度解析:从舵机PID到速度闭环

本文深度解析了第18届全国大学生智能汽车竞赛中四轮车的核心控制策略。从舵机PID方向控制的基础原理与机械校准入手,详细阐述了误差计算、PD控制等关键环节;进而深入探讨了基于编码器的速度闭环控制,包括增量式PI算法与速度决策逻辑。文章结合实战经验,提供了方向环与速度环的协同调参思路与避坑指南,旨在帮助参赛者构建稳定、高效的智能车控制系统。

potato的博客 463

工厂模式详解

题目: 实现一个简单的计算器应用程序。 功能要求: 1) 只需要实现+、-、*、、/四种运算; 2) 程序运行时,输入两个数和运算符号,即可得到运算结果。 程序:可复用、可维护、可拓展、灵活性好 简单工厂模式的优点: 1)将对象的创建和对象本身业务处理分离可以降低系统的耦合度,使得两者修改起来都相对容易; 2)在调用工厂类的工厂方法时,由于工厂方法是静态方法,使用起来很方便,可通过类名直接调用,而且只需要传入一个简单的参数即可;对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量; 3)通过引入配置文

Suzerk的博客 1629

英飞凌 AURIX TC3XX 系列单片机的 NVM-Flash 介绍

简单介绍英飞凌 AURIX TC3XX 系列多核单片机的 Flash,便于快速上手使用

大橙子的博客 6640

【无人机路径规划】基于强化学习实现多无人机路径规划

【无人机路径规划】基于强化学习实现多无人机路径规划

k8291121的博客 1656

java工厂模式快速理解_工厂模式理解了没有?

前言只有光头才能变强回顾前面:昨天写了单例模式了,今天是时候写工厂模式啦~工厂模式我个人认为其实比较难理解的,如果有接触过|听过|见过该模式的同学很可能就会想:我自己new一个对象出来就好了,简单快捷。用得着你这个工厂模式吗?搞一个工厂出来还要写一大堆的代码呢~网上的很多资料都是在阐述着:工厂模式的好处就是解耦。相信大家对解耦这个词也不陌生,那解耦究竟有什么好处呢?本文章试图去解释为什么要用工厂模...

weixin_39683144的博客 167

【SAP HANA 24】HANA与Oracle SQL语法对照表

HANA SQL参考及Oracle 语法对照

探索 Java 编程的技巧、最佳实践和解决方案。本博客提供针对 Java 开发者的实用指南,涵盖从基础到高级话题,旨在提升编程效率和技能。 1424

32GB显存跑56GB大模型:Shared Memory内存调度实战指南

Shared Memory是现代GPU异构内存架构的核心枢纽,它通过统一虚拟内存(UVM)、地址转换服务(ATS)和页表级动态调度,打破显存物理容量限制。其原理在于将CPU系统内存与GPU显存纳入同一虚拟地址空间,借助DMA引擎实现零拷贝数据迁移,并由驱动层捕获页错误触发智能预取。这一机制赋予AI推理显著的技术价值:支持权重分页驻留、KV Cache动态spill、计算图流水并行,从而在32GB显存上高效运行56GB级大模型。典型应用场景包括多租户LLM服务、3D医疗影像分割、实时视频分析等内存敏感型AI工

weixin_33836874的博客 351

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【设计模式】-2.工厂模式,几个例子带你理解工厂模式

23种设计模式持续更新-2.工厂模式 快上车 🚗GOGOGOGO! 关注和点赞是我最大动力 文章目录简介简单工厂模式优缺点静态工厂模式工厂模式优缺点抽象工厂模式优缺点使用场景模式扩展 简介 在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的开闭原则。如果我们使用工厂来生产对象,我们就只和工厂打交道就可以了,彻底和对象解耦,如果要更换对象,直接在工厂里更换该对象即可,达到了与对

qq_52314655的博客 5692

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

谈谈我对工厂模式的理解

多读多写多记录,多学多练多思考。--------- Banana.Banuit Gang(香柚帮) 说起一件事物或者一个东西的时候,我们第一反应就是,这个东西或事物到底是干啥的,有什么用呢?为什么要用它?不用不行吗?它到底能给我们带来什么?等等等等,我们会生出好多好多的疑问。 那么工厂模式到底是个什么玩意儿,有什么作用呢? 工厂模式:其实它主要是用来实例化有共同接口的类,它可以动态的决定应该...

@Banana的博客 3203

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

深入理解工厂模式

一、工厂模式 1.1定义 “Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.” (在基类中定义创建对象的一个接口,让子类决定...

.... 永远年轻,永远热泪盈眶 1万+

简单理解抽象工厂模式

对抽象工厂模式的简单理解 作者:http://blog.youkuaiyun.com/fenglibing 转载请保留 定义: 抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态,,当有多个抽象角色时,使用的一种工厂模式,它向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。   注意:        注意产品族的概念:

冯立彬的博客 3189

深入理解设计模式-简单工厂模式vs工厂方法模式vs抽象工厂模式对比讲解

文章目录前言一、简单工厂模式1.描述2.特点3.优缺点4.类图说明二、工厂方法模式1.描述2.特点3.适用场景4.类图说明5.简单工厂模式与工厂方法模式区别:三、抽象工厂模式1.描述2.特点3.优缺点4.类图说明结尾 前言 简单工厂模式、工厂方法模式、抽象工厂模式比较相像,很多同学傻傻分不清楚,本文进行详细对比说明,建议对三个模式有一定基础再进行阅读,如不了解可查看往期文章。 一、简单工厂模式 1.描述 简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但

少说,多做 1万+

我对工厂模式的理解

工厂模式就是把客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如何创建及如何向客户端提供。

蚂蚁爱吃糖 868

彻底理解工厂模式

一般情况下,工厂模式分为三种更加细分的类型:简单工厂、工厂方法和抽象工厂。不过,在GoF的《设计模式》一书中,它将简单工厂模式看作是工厂方法模式的一种特例,所以工厂模式只被分成了工厂方法和抽象工厂两类。实际上,前面一种分类方法更加常见。在这三种细分的工厂模式中,简单工厂、工厂方法原理比较简单,在实际的项目中也比较常用。而抽象工厂的原理稍微复杂点,在实际的项目中相对也不常用。 简单工厂(Simple Factory) 简单工厂模式:定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共

Hopefully Sky的博客 1266

Android 工厂模式,三种工厂模式的理解

工厂模式是一种创建者模式,在任何生成复杂对象的地方都可以使用工厂模式。理论来说在任何使用A a = new A()的方式都可以使用工厂模式,虽然使用工厂模式可能需要多做一些工作,但是在后续的开发和维护都带来了方便。 如果我们需要在构建对象的时候,需要做很多的处理工作,比如初始化工作,查询工作等一些耗时的工作,如果我们将这些操作全部放入到构造方法中去写,那么势必在后期维护的带来不方便,而且始化工作如果是很长一段代码,说明要做的工作很多,将很多工作装入一个方法中,相当于将很多鸡蛋放在一个篮子里,是很危险的,这

qq_25330791的博客 1059
上一篇: 单例模式你会几种写法?
下一篇: Spring IOC知识点一网打尽!
Java3y
Java3y 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 509原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值