【设计模式】设计模式之工厂模式

工厂方法模式-> 创建模式 
  
使用场景?
作用?
代码形态?

场景: 大量类似的实体类;要创建的实体类都是同一本质的东西(披萨);有部分类似功能(准备、烘烤、切法);实现方式不一样(准备的材料不同、烘烤时间不同、切法不同);将繁琐复杂的创建类的过程聚集在一起,有序清晰;把具体实例化的过程从客户代码中抽离;

作用:
1、将创建对象的代码集中在一起,便于管理(工厂类中创建类的方法)
2、依赖接口,而不是具体类(披萨抽象类)
3、针对接口编程,而不是针对实现编程(披萨抽象类、创建者基类)

简单工厂方法模式 又称静态工厂方法模式; 
简单工厂模式中的工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化
简单工厂方法模式,分由3部分组成:工厂类,抽象产品,具体产品。
  • 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。
  • 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
  • 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
工厂定义成静态方法:不需要创建对象的方法来实例化对象;不能通过继承来改变创建方法的行为

工厂方法模式:
定义了一个创建对象的接口,但由自子类决定要实例化的类是哪一个,工厂方法让类把实例化推迟到子类。
        
工厂方法模式由4部分组成:抽象工厂,具体工厂,抽象产品,具体产品
  • 抽象工厂角色: 这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
  • 具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。
  • 抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般有抽象类或者接口来实现。
  • 具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现。

抽象工厂方法模式
    提供一个借口, 用于创建相关或依赖对象的家族,而不是需要明确指定具体类。

我的理解:


日常场景: 在一个蛋挞店(多种蛋挞提供、蛋挞制作步骤一样,原料不一样):
简单工厂方法模式:
        服务生接受客户订单(参数),【服务生根据(参数)自己做】,自己提供给客户
工厂方法模式:
服务生接受客户订单{某某蛋挞} ,【服务生根据 订单 {某某蛋挞} 交给专门制作此类蛋挞的师傅,师傅 制作蛋挞 {一般时候该师傅只做这一种蛋挞,不要参数} ,交给服务生】, 服务生 提供给客户
抽象工厂方法模式:
服务生接受客户订单{某某蛋挞,加不加何种水果丁} ,【服务生根据 订单 {某某蛋挞 } 交给专门制作此类蛋挞的师傅,师傅 制作蛋挞 {一般时候该师傅只做这一种蛋挞,不要参数},根据{
,何种水果丁 }制作水果丁{ 一般时候该师傅只做这一种水果丁,不要参数 } ,交给服务生】, 服务生 提供给客户
ps:产品族就是该蛋挞的一系列,加不加水果丁,加不加其他配料

简单工厂与工厂方法之间的区别:
1.简单工厂是一种has-a的关系,所有的产口是由店铺中的一个工厂成员所创建的。而工厂方法是一种is-a的关系,它把创建产品的事情留给了工厂方法的子类去决定如何创建。
2. 简单工厂把全部的事情,在一个地方都处理完了,然而工厂方法却是创建一个框架,让子类决定要如何实现。
3. 简单工厂的做法,可以将对象的创建封装起来,但是简单工厂不具备工厂方法的弹性,因为简单工厂不能变更正在创建的产品。
抽象工厂模式与工厂方法模式的区别
        抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。在编程中,通常一个产品结构,表现为一个接口或者抽象类,也就是说,工厂方法模式提供的所有产品都是衍生自同一个接口或抽象类,而抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值