首页
学习
活动
专区
圈层
工具
发布

java的静态工厂方法

序:什么是静态工厂方法 在 Java 中,获得一个类实例最简单的方法就是使用 new 关键字,通过构造函数来实现对象的创建。...2.1 静态工厂方法与构造器不同的第一优势在于,它们有名字 由于语言的特性,Java 的构造函数都是跟类名一样的。...(当然,Date 类在目前的 Java 版本中,只保留了一个无参和一个有参的构造函数,其他的都已经标记为 @Deprecated 了) 而如果使用静态工厂方法,就可以给方法起更多有意义的名字,比如前面的...在实际的场景中,单例的写法也大都是用静态工厂方法来实现的。...除此之外 以上是《Effective Java》中总结的几条应该使用静态工厂方法代替构造器的原因,如果你看过之后仍然犹豫不决,那么我觉得可以再给你更多一些理由 —— 我个人在项目中是大量使用静态工厂方法的

95441

java抽象方法,静态方法,默认方法

接口 在了解抽象方法和默认方法之前需要先了解什么是接口 接口是功能的集合,是一种数据类型 接口里定义方法默认是public abstract(抽象方法),没有具体的实现,实现由实现类实现,且必须实现...(静态方法和默认方法除外) 抽象方法 没有具体的实现,实现由实现类(或子类)实现,且必须实现 定义 interface InterfaceDemo{ //默认方法 public abstract...void fun3(); void fun4(); } 因为接口里的方法默认是public abstract 所以修饰符可以省略不写 静态方法 java8允许接口中定义静态方法 通过接口名....方法即可调用静态方法,不能通过实例化实现类来调用方法 interface InterfaceDemo{ public static void fun1(){ System.out.println...("静态方法"); } } 默认方法 java8中允许接口中定义默认方法 java8之前接口与实现类之间的耦合度非常高,在接口中添加一个方法,所有的实现类都必须去实现这个方法,而默认方法的出现结局了这个问题

3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    设计模式之静态工厂、工厂方法和抽象工厂的联系与区别

    静态工厂增加需要是修改源代码,对修改不封闭,不符合开闭原则。...不足: 由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。...---- 工厂方法模式:① 一个抽象产品类,可以派生出多个具体产品类。        ② 一个抽象工厂类,可以派生出多个具体工厂类。        ...② 一个抽象工厂类,可以派生出多个具体工厂类。        ③ 每个具体工厂类可以创建多个具体产品类的实例。 区别:① 工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。...② 工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。 ----

    1.7K20

    Java抽象工厂模式的使用方法

    类(这3个类统一用1个抽象类描述,这也是抽象工厂模式的思想,本例设为Factory类)。...既然返回类型为Factory,所以maleFamilyFactory类、femaleFamilyFactory类和animalFamilyFactory类都必须继承自Factory类,以下为实现3个子工厂类的方法...; } }  上述3个类实现了各自的display方法,因此Id类可以定义1个display的抽象方法,以使继任者实现各自的display方法,Id类代码如下。...; } } 上述3个类实现了各自的display方法,因此Id类可以定义1个display的抽象方法,以使继任者实现各自的display方法。 ...package lyn; public abstract class Factory{ public abstract Id getId(String string); } 这里的getId定义为抽象方法的结果就是要求

    71010

    Java设计模式之简单工厂、工厂方法和抽象工厂

    ,在这个过程中,其实我们只做了一件事:将foodstore中创建对象的部分与其隔离开(其实工厂模式的目的就是封装对象的创建),即:封装变化 下面是封装之后的FoodStore: class FoodStore...简单工厂已经很厉害了!但是还不足以应付所有的情况,让我们看看工厂方法和抽象工厂的表现。 问题1:假如有很多商店都向简单工厂去取对象,那么所有商店取得的面包对象和鸡肉对象都是一样的!...工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。...总结 纵览三种设计模式,可以发现简单工厂和工厂方法都可以看做抽象工厂的子模式,抽象工厂本身就是工厂方法组合而成(将对象的创建延迟到子工厂),而相应的每个子工厂,也都可以看做是一个简单工厂,只不过在抽象工厂里...在很多情况下,简单工厂和工厂方法都能很好的替代抽象工厂,例如,在不需要复用的对象创建封装时,工厂方法比抽象工厂更合适,在创建对象的类型相对确定时(不需要弹性),用简单工厂也能胜任。

    80470

    抽象工厂方法和工厂方法的区别

    假如我们现在有一个功能,使用Sqlserver保存User的数据,单一的方式比较简单,可以封装并在方法里实现与Sqlserver的连接,但是我们现在又增加了Access 同样保存User的数据,通过封装类的方法不能满足需要了...,这个时候可以通过工厂方法来实现,如下图所示,创建IUser接口Sqlserver和Access分别去实现,并创建工厂接口类,Sqlserver和Access实现工厂类 每个实现类的职责都是单一,实现单一的对象...这种方式就是工厂方法。 ?...这个时候,我们不仅要要保存User的数据,还要保存Department的数据,此时,这个时候需要利用到抽象工厂方法,抽象工厂方法在工厂类里会实现不同的对象的,这是工厂方法不同的地方,工厂方法实现的是单一的对象...在抽象工厂方法里不仅要实现的createUser也要实现createDepartment,这就是抽象工厂方法 ?

    59520

    Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)

    Java中的工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。...Java中工厂模式主要三种形态 简单工厂模式(又称静态工厂方法):定义一个类来负责其他类的实例化,被创建的实例通常具有共同的父类或接口。...客户端代码通过调用这个静态工厂方法来获取产品实例,而无需直接与具体的产品类交互。...在实际应用中,如果需要频繁添加新的产品类型,可能会更倾向于使用抽象工厂模式或其他更灵活的工厂模式。 三、工厂方法模式 工厂方法模式是对简单工厂模式的进一步抽象化。...同时,在实际应用中,我们可以根据具体需求选择使用简单工厂模式、工厂方法模式或抽象工厂模式中的任意一种或多种组合使用以满足需求。

    29010

    抽象工厂模式——工厂方法的大结局

    回顾之前的设计模式,简单工厂模式所有逻辑都封装在工厂类中,工厂根据客户提供的产品名字创建对应产品的对象实例;工厂方法模式将产品的创建过程放到了具体工厂类中,每一个工厂可以创建一个具体产品,由此可能会创建许多工厂类...此时我们可以把这些相关的产品归纳为一个“产品族”,由同一个工厂来生产,这即是Jungle今天要学习的抽象工厂模式。 01 抽象工厂模式简介 抽象工厂模式是常用的创建型设计模式之一。...02 抽象工厂模式结构 抽象工厂模式结构与工厂方法模式结构类似,不同之处在于,一个具体工厂可以生产多种同类相关的产品: 抽象工厂(AbstractFactory):所有生产具体产品的工厂类的基类,提供工厂类的公共方法...; 具体工厂(ConcreteFactory):生产具体的产品 抽象产品(AbstractProduct):所有产品的基类,提供产品类公共方法 具体产品(ConcreteProduct):具体的产品类...由此,Jungle总结了抽象工厂模式的特点: 优点: 工厂方法用于创建客户所需产品,同时向客户隐藏某个具体产品类将被实例化的细节,用户只需关心所需产品对应的工厂; 新加入产品系列时,无需修改原有系统,增强了系统的可扩展性

    60820

    简单工厂、工厂方法、抽象工厂的比较与分析

    比较: 简单工厂:定义一个工厂类,根据应用端传入的不同参数创建不同的业务实例。也可以理解为统一的静态方法工厂,该工厂类负责所有不同业务类型的封装。...工厂方法:将简单工厂进行优化,定义多种业务类,并定义每种业务相对应的工厂类,即不同的工厂类各自封装对应的业务,由应用端按需创建工厂及调用工厂封装的业务方法。...抽象工厂:将工厂方法进行抽象及优化,定义多种业务类,定义多个工厂类,工厂类可以封装多种业务类型,由应用端按需创建工厂及调用工厂封装的多种不同的业务类型。 代码分析: 简单工厂的代码 ?...PhoneFactory(); Phone phone1=phoneFactory.getPhone("huawei"); phone1.produce(); } } 工厂方法的代码...PhoneFactory phoneFactory1 = new HuaweiPhoneFactory(); phoneFactory1.getPhone().produce(); } } 抽象工厂的代码

    57420

    Java中23种设计模式之静态工厂方法

    一、背景介绍 工厂模式是设计模式的一种,设计模式是自程序开发逐渐就有的,提高开发效率的一种设计思路,先前的开发者们一直在用,只是后来在《Effective Java》中总结了下,就是现在的23种设计模式...2.工厂模式大概有三种 简单工厂模式 工厂方法模式 抽象工厂模式 3.简单(静态)工厂模式 简单工厂模式是最初自然而然就有的设计思想,它只是把创建过程比较自然的封装了一下,又称为静态工厂模式...四、参考文章及更多介绍 由于我目前学到的有限,更多方面还不了解,不便说自己还不清楚的,但是下面的一些文章确实不错: 静态工厂模式 理解(有代码示例) Java静态工厂方法 —— 有了它,你还需要工厂模式吗...(有代码示例) 简单工厂(静态工厂)(有代码示例+图解) 简单(静态)工厂模式(有代码示例) 关于 Java 的静态工厂方法,看这一篇就够了!...(有代码示例,静态工厂方法写的比较全面) java 设计模式 常用21种(通过代码解释了10种设计模式) 设计模式之泡MM真经(通俗易懂的解释了23种设计模式,很推荐!)

    19310

    设计模式中工厂方法与抽象工厂之间的区别联系

    再通俗深化理解下:工厂模式针对的是一个产品等级结构 ,抽象工厂模式针对的是面向多个产品等级结构的。...再来看看工厂方法模式与抽象工厂模式对比: 工厂方法模式 抽象工厂模式 针对的是单个产品等级结构 针对的是面向多个产品等级结构 一个抽象产品类 多个抽象产品类 可以派生出多个具体产品类 每个抽象产品类可以派生出多个具体产品类...一个抽象工厂类,可以派生出多个具体工厂类 一个抽象工厂类,可以派生出多个具体工厂类 每个具体工厂类只能创建一个具体产品类的实例 每个具体工厂类可以创建多个具体产品类的实例 举个例子说明下 用种蔬菜的例子来说明事实...可以从UML图很明显的看出来,抽象工厂可以创建多个产品类对象,如在种菜工厂中,有种根菜,种茎菜。...工厂模式与抽象工厂模式以及简单工厂模式只有在具体应用的时候,分析具体的产品层级,然后选择相应的设计模式。

    8.7K40

    Java设计模式之工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)

    工厂模式出现的原因 在java中,创建一个对象最简单的方法就是使用new关键字。...,符合java开闭原则 用户需要什么类型的产品,就从什么类型的工厂生产 3、抽象工厂模式 1个抽象工厂类,多个具体工厂类,多个抽象产品类,多个抽象产品类 每个工厂可以创建多个产品实例,当需要创建新产品的时候...方法,违背了java对扩展开放,对修改关闭的原则 二、工厂方法模式 需求:我不希望只有一个工厂来生产所有的宝马车,我希望每种宝马车都由其对应的工厂来生产 public abstract class BMW...:EngineA,我的空调:AirConditionA 我是BMW520,我的引擎:EngineB,我的空调:AirConditionB 工厂方法模式和抽象工厂模式比较 工厂方法模式中,只有一个抽象产品类...而在抽象工厂模式中,当减少一个产品或方法使得工厂提供的产品不再构成产品族后,它就演变成了工厂方法模式。 所以在使用工厂模式时,只需要关心是否降低了耦合度就ok了。

    78720

    Java入门第100课——Calendar的getInstance方法

    问题 Calendar类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法。...方案 1)首先,使用Calendar类的getInstance方法获取Calendar类的对象,然后使用下列代码获取该对象所属的实际类型,并输出,代码如下所示: System.out.println...Calendar类本身是一个抽象类,它是所有日历类的模板,并提供了一些所有日历通用的方法;但它本身不能直接实例化对象,程序只能创建Calendar子类的实例,Java本身提供一个GregorianCalendar...Calendar类提供了几个静态getInstance方法来获取Calendar对象,这些方法根据TimeZone、Locale来创建Calendar对象。...本案例中使用的getInstance方法刚好使用了默认的TimeZone、Locale来创建Calendar对象,通过输出结果可以看出默认的TimeZone、Locale创建的Calendar对象所属的实际类型为

    1.1K20

    详解Java中的抽象类和抽象方法

    如果类中的某个方法,无法具体的给出,它就该是个抽象方法。...抽象方法的定义 Java中普通方法的定义方式是 访问权限 返回类型 方法名(有参数填写参数,没参数为空){ 方法内部代码; } 因为抽象方法我们无法给出具体的实现,所以抽象方法的定义与普通方法有所不同...定义方式如下: 访问权限 abstract 返回类型 方法名(有参数填写参数,没参数为空); 注意:因为不知如何实现,所以没有大括号了。 抽象方法的使用 抽象方法必须声明在抽象类中。...,调用起来没有任何意义; 抽象类中可以有构造方法,可供子类创建对象时,初始化父类成员使用 子类的构造方法之中,是有默认的super()方法的,所以需要访问父类的构造方法,那么父类的构造方法需要存在; 抽象类中...如果子类不重写所有抽象方法,那么子类中还包含抽象方法,还应该是抽象类。

    2.1K10

    工厂方法模式和抽象工厂方法模式的battle

    ,而是直接调用对应的方法即可:5.静态工厂方法上面的这个例子,我们需要先创建对象,然后去调用里面的相关的方法,这个时候我们可以继续优化,把原来的这个换成我们的静态的方法,这样就可以直接使用我们的类调用相关的方法即可...,不需要进行这个new对象的操作;然后我们的这个测试类里面可以直接调用方法,不用创建对象,这个就是我们的静态方法的好处:6.抽象工厂方法模式接下来,我们继续扩展,这个时候,如果我们需要在原来的发送邮件,...,可以增加,但是不要动原来的代码);因此,我们引入了下面的这个抽象工厂方法:通过下面的这个类图你可以是可以看出来的,我们的这个抽象工厂方法模式在原来的基础上进行了二次封装,定义了新的接口,两个工厂:1)...原来是一个工厂里面两个方法,我们需要增加包裹发送方式的时候,需要在工厂里面添加方法,违反了开闭原则;2)抽象工厂方法里面,我们定义两个工厂,一个发送方式对应一个工厂,我们需要增加这个新的发送方式的时候,...原来的代码都不需要变化,直接添加新的工厂里面实现这个方法即可;3)这样的话,我们的抽象工厂方法就解决了我们的简单工厂方法的这个违反了开闭原则的问题,提高了代码的封装性和可扩展性;

    8500

    工厂方法模式是怎么变抽象工厂的

    监考老师很好,下半年继续 继续上一回的工厂方法模式之后,我们进一步说一下抽象工厂。...Abstract Factory(抽象工厂) 特点 抽象工厂提供了一个创建一系列相关或相互依赖的接口,且无须指定它们具体的类。...定义一个相对应的产品对象,内部实现AbstractProduct Client 仅使用由AbstractFactory 和 AbstractProduct 类声明的接口 与工厂方法相比,其实就在产品的抽象上多抽一个产品...B,工厂接口中多定义个方法。...由多个产品中的一个来配置时。 提供一个产品库,仅显示接口而不是实现时。 结束 抽象工厂的每个方法看起来都像是工厂方法,且每个方法都被声明成抽象,由子类的方法进行覆盖和实现。

    23530

    Java中的静态同步方法

    Java中的静态同步方法 简介 在Java中存在静态同步方法,也就是在静态方法上使用synchronized关键字。...它的锁是当前类的Class对象,也就是说,每个类只有一个Class对象,在多线程下通过这种方式可以确保同一时间只能有一个线程进入到静态同步方法中执行代码,从而避免并发导致的数据错误和异常。...} } 在上面的代码中,我们定义了一个Singleton类,并使用了静态变量instance和静态同步方法getInstance实现了单例模式。...需要注意的是,在静态同步方法中,我们不能使用this关键字来获得锁,而应该使用当前类的Class对象,即Singleton.class。...因为在Java中,每个类都对应着唯一的Class对象,因此这么做能够避免不必要的歧义和意外情况的发生。

    36110

    Java中静态方法不能调用非静态方法的原因

    如图,是Java中静态代码和实例对象互相调用的规则,我们接下来就讲讲为什么在Java中静态方法不可以调用非静态代码呢。...静态方法是属于类的,即静态方法是随着类的加载而加载的,在加载类时,程序就会为静态方法分配内存,而非静态方法是属于对象的,对象是在类加载之后创建的,也就是说静态方法先于对象存在,当你创建一个对象时,程序为其在堆中分配内存...静态方法不依赖于对象的调用,它是通过‘类名.静态方法名’这样的方式来调用的。而对于非静态方法,在对象创建的时候程序才会为其分配内存,然后通过类的对象去访问非静态方法。...因此在对象未存在时非静态方法也不存在,静态方法自然不能调用一个不存在的方法。...这和对象的创建和静态方法以及非静态方法之间的关系有关。也就是上面说的那些。

    6.4K50

    设计模式(四):从“兵工厂”中探索简单工厂、工厂方法和抽象工厂模式

    我们在改的过程中,不会动“工厂方法”一以外的部分,我们只重写第三部分中类图的绿框部分。简单的说,就是将上面的“工厂方法模式”替换为“抽象方法模式”,然后在对比两者的异同。...实现完工厂后,我们要修改武器的使用用户。因为在“工厂方法”模式中,不同工厂武器的选择是在用户的子类中实现的,而在“抽象工厂”中就使用不到子类了。“抽象工厂”模式的用户与“简单工厂”模式的用户非常相似。...五、“工厂方法”+“抽象工厂”模式 紧接着,我们要做一件事情,就是保留第四部分中的“装饰者”、“抽象工厂”,在此基础上添加上“工厂方法”模式。...红框中的装饰者模式与绿框中的“抽象工厂模式”是不变的。我们只是使用“工厂方法模式”重写了第四部分中的WeaponUser类。...3.测试用例 至此,我们又在“装饰者”、“抽象工厂”的基础上添加上了“工厂方法模式”。通过上面的案例我们不难看出,“抽象工厂”是工厂的集合,“工厂方法”会指定使用工厂集合中某一个特定的工厂。

    992100

    详解Java中静态方法

    参考链接: Java中的静态类 定义: 在类中使用static修饰的静态方法会随着类的定义而被分配和装载入内存中;而非静态方法属于对象的具体实例,只有在类的对象创建时在对象的内存中才有这个方法的代码段。...原因: 因为静态方法和静态数据成员会随着类的定义而被分配和装载入内存中,而非静态方法和非静态数据成员只有在类的对象创建时在对象的内存中才有这个方法的代码段。 ...引用静态方法时,可以用类名.方法名或者对象名.方法名的形式。...            return t;         }     } } 总结: (1)static修饰的静态方法会随着类的定义而被分配和装载入内存中,编译器只为整个类创建了一个静态变量的副本,...(2)静态不能引用非静态这一特性,是由于静态的会随着类的定义而被分配和装载入内存中这一关键点决定的;如果静态引用了非静态的,根本无法从内存中找到非静态的代码段,势必会出错,这种做法是Java虚拟机决不允许的

    1K20
    领券