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

各种文章网上特别多,下面贴一个我觉得不错的,供大家学习。我就不重复了,没啥意思。

https://blog.csdn.net/lingfengtengfei/article/details/12374469?utm_medium=distribute.pc_relevant.none-task-blog-searchFromBaidu-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-searchFromBaidu-2.control

重点来讲讲自己的理解:

简单工厂:自己就负责对象创建。

工厂方法:统一接口定义方法,具体创建由子类实现

用户:我要一个东北虎

简单工厂:我自己就会!做好了,给你

工厂方法:我只规定了我的儿子们能做虎。你要东北虎,你去找我儿子东北虎工厂。

        东北虎工厂:做好了,给你

 

抽象工厂:如果我们的需求,只是创建猫和狗,那简单工厂和工厂方法都ok。后来随着发展,猫也要分类了,分为布偶和美短。狗分为二哈和泰迪。此时如果用工厂方法,我们就需要四个工厂,分别创建四个对应的对象,显然不是很简便。此时应用抽象工厂。父类:两个方法,createCat和createDog。两个子类工厂,按某个维度区分。比如中国只生产二哈美短,美国生产布偶和泰迪。那就有两个子类工厂,其中ChinaAnimalFactory实现了createCat,只create美短;实现了createDog,只create二哈。AmericaAnimalFactory对应实现了创建布偶和泰迪。

 

相对工厂方法,抽象工厂的工厂实例,可以创建多个不同的实例,而工厂方法的工厂实例只能创建某一特定实例。此为区别

 

 

 

 

当一件事物,有不同的细分各类,比如动物分为猫科犬科,猫科犬科下面又有不同细分,这时候可以使用工厂模式,封装内部实现,简化代码。

但是如果看相应的工厂,就人发现内部实现,还是在用if语句判断入参,从而实例化相应的对象。那么意义何在?

个人理解:实际的情况,往往不是单层的分类,而是多层。比如下图:

这种情况下,当我们通过工厂实例化一个东北虎,实际上已经经过了层层判断,工厂可以隐藏这几层,从而使代码优雅。

另外每个实例上的属性,比如奔跑,也通过实例内部的构造方法,自己搭配了不同的属性和能力,这部分也得到了隐藏和隔离,使代码优雅、易维护、易拓展。

 

工厂模式归属于建造模式大类,是为了优雅地实现实例的建造。是为了分离实例的创建和使用。

想像一下如果没有这个模式,我new一个东北虎,然后要set他的食谱,set速度,栖息地等,是不是很麻烦?而使用工厂模式之后,只需要指定:我要东北虎,这一系列动作已经实现。实现了前文据说:创建与使用分离。

这个理念与java代码设计的依赖倒置,其实有所关联,有兴趣的读者可以自己联系起来理解一下,会有所帮助 。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值