java factory类_推荐优雅工厂设计模式(Java)

看此文的友人需要先了解Simple Factory

Static Factory Method

这个工厂设计模式的目的

提供一个封装在名为factory的类中的静态方法,以便隐藏实现逻辑并使客户机代码关注于使用,而不是初始化新对象。

现实中的例子如果原来你的程序是使用Oracle数据库的,现在需要换到mysql数据库中。我们需要实现Simple Factory模式,在该模式中可以调用静态方法来创建到给定数据库的连接。

我们看看维基百科上的翻译Factory是一个用于创建其他对象的对象,工厂是一个函数或方法,它返回一个不同原型或类的对象。

代码实例

我们创建一个interfacePhone 和两个实现类 Huawei and Iphone.

public interface Phone {

String getDescription();

}

public class Huawei implements Phone {

static final String DESCRIPTION = "This is Huawei.";

@Override

public String getDescription() {

return DESCRIPTION;

}

}

public class Iphone implements Phone {

static final String DESCRIPTION = "This is Iphone.";

@Override

public String getDescription() {

return DESCRIPTION;

}

}

下面的枚举表示我们支持的手机类型 (Huawei and Iphone).

public enum PhoneType {

HUAWEI(Huawei::new),

IPHONE(Iphone::new);

private final Supplier constructor;

PhoneType(Supplier constructor) {

this.constructor = constructor;

}

public Supplier getConstructor() {

return this.constructor;

}

}

我们会有个静态方法 getPhone在工厂类 PhonesFactory中 生产不同的PhoneType类

public class PhonesFactory {

public static Phone getPhone(PhoneType type) {

return type.getConstructor().get();

}

}

调用的时候我们会使用 factory class生产出不同的PhoneType.

var huawei = PhonesFactory.getPhone(PhoneType.HUAWEI);

var iphone = PhonesFactory.getPhone(PhoneType.IPHONE);

类图:

适用性

优点:

允许将所有对象创建在一个地方,避免在代码库中传播“new”关键字。

允许编写松散耦合的代码。它的一些主要优点包括更好的可测试性、易于理解的代码、可交换的组件、可伸缩性和隔离特性。

缺点:

如果本来就比较简单的业务。会让代码看起来更复杂

开源项目中用到这个设计的地方:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值