4.工厂模式

Head-First-Design-Patterns-master\src\headfirst\designpatterns\factory

 

案例:新建披萨类

将变化的地方进行封装。

简单工厂不是一个“真正的”模式,更像是一种编程习惯。

在设计模式中,所谓“实现一个接口”,并不一定表示“写一个类”,并利用implement关键词来实现某个java接口,“实现一个接口”泛指“实现某个超类型(可以是类或接口)的某个方法”

所有工厂模式都用来封装对象的创建。工厂方法模式通过让子类决定该创建的对象是什么,来达到将对象创建的过程封装的目的。

工厂方法模式定义:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类

依赖倒置原则:要依赖抽象,不要依赖具体类

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

抽象工厂定义了一个接口,所有的具体工厂都必须实现此接口,这个接口包含一组方法用来生产产品。

具体工厂实现不同的产品家族。要创建一个产品,客户只需要使用其中的一个工厂而完全不需要实例化任何产品对象。

客户的代码中只需要涉及抽象工厂,运行时将自动使用实际的工厂。

 

定义的Pizza抽象类,具体的pizza种类继承pizza抽象类并具体实现抽象方法prepare方法,继承来Pizza抽象类中的具体方法。

定义的PizzaStore抽象类,具体的pizzaStore种类继承抽象类并具体实现抽象方法createPizza方法,在createPizza方法中new 独特的pizza(导入pizza原料工厂这个参数)。

定义PizzaIngredientFactory接口,此接口是用来生产原料。各地方的独特风味的披萨工厂实现此接口,为独特pizza(继承了Pizza的具体类)的具体实现类提供原料。

 

 

工厂方法和抽象工厂:

区别:

工厂方法使用的是类,使用继承,利用工厂方法创建对象,需要扩展一个类,并覆盖他的工厂方法,工厂方法通过子类来创建对象,客户只需要知道他们所使用的抽象类型就可以了,而由子类来负责决定具体类型,

抽象工厂使用的是对象,使用的是组合,提供一个用来创建一个产品家族的抽象类型,这个类型的子类定义了产品被产生的方法。先实例化这个工厂,传入一些针对抽闲类型所写的代码。把一些相关的产品集合起来。如果加入新产品就必须改变接口 。抽象工厂使用工厂方法实现具体工厂

 

相同点

抽象工厂和工厂方法都是为了创建对象。

 

可以参考一下这篇博客:https://www.cnblogs.com/zhangchenliang/p/3700820.html

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值