设计模式——简单工厂模式(Simple Factory)

“针对接口编程,而不是针对现实编程”这个原则带给了我们许多的好处,例如:

public void doSomething(Animal animal) {
    ...
}
这里的Animal是一个接口,那么doSomething方法内部根本不需要管animal这个引用到底调用的是哪个对象,因为Animal可以有各种各样的实现类

但是看看这段代码:

Animal animal = new Dog();
这样有什么问题呢?虽然下面的代码依然是使用了Animal的接口来进行编程,但是在创建对象这个地方,我们还是在代码中显示地指定了具体的实现类是Dog

如果编程的场景足够糟糕的话,甚至还会出现这样的代码:

Animal animal = null;
if (DOG.equals(xxx.getType())) {
    animal = new Dog();
} else if (CAT.equals(xxx.getType())) {
    animal = new Cat();
} else if (TIGER.equals(xxx.getType())) {
    animal = new Tiger();
} ...
...
...
一旦Animal的实现类的种类发生了变化,我们就不得不修改现有的代码了

而为了让"产生对象"这个行为也可以和具体的实现类隔离开来,于是就有了工厂模式:

Animal animal = AnimalFactory.create(xxx.getType());
而具体生成什么样的对象,怎么样去生成一个对象,这些就是AnimalFactory的事情了,我们业务逻辑代码中根本不需要去关心这些

可能还会有疑问,生成对象的代码在AnimalFactory写和在业务逻辑中去写不是都一样吗?不是都要写一次吗?

但要记住,生成Animal对象的场景可能并不是只有一个,可能有几个,甚至几十个地方都需要根据相同的规则去生成一个Animal对象

这样AnimalFactory的价值就真正体现出来了

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值