设计模式之:简单工厂 工厂方法模式 抽象工厂模式

本文内容来自书《Head First Design Pattern》和老师英文PPT(基本上也是来自这本书),有错误欢迎指出!

The Factory Pattern

前言

我想new一个对象,比如说Pizza的对象,但是根据输入的不同,可能new其不同的子类,比如CheesePizza, VegePizza...,一旦我需要删除增加披萨类型,代码就需要一改再改。(要面对abstract,而不是面对implementation)因此,我们需要封装创建对象(object creation)的代码

简单工厂

使用一个工厂类,把创造对象的过程封装起来,来生产同一等级结构中的任意产品

 

Pizza、PizzaStore:均abstract

工厂方法模式Factory Method Pattern

概念

工厂方法模式定义了创建对象的接口,但让子类决定实例化(instantiate)哪个类。工厂方法允许类延迟实例化(defer instantiation)到子类

例子中,创建对象的接口:createPizza(抽象的工厂方法);因为PizzaStore(Creator)类抽象,所以必须把实现创建对象的步骤延迟到子类(如NYPizzaStore中),但父类仅仅是对Pizza(Product)进行操作,实现解耦。

Delegating to subclass:每个子类都具体实现这个抽象工厂方法。

public abstract class PizzaStore {
   public Pizza orderPizza(String type) {
     Pizza pizza;
     pizza = **createPizza(type)****;**
     pizza.prepare();
     pizza.bake();
     pizza.cut();
     pizza.box();
     return pizza;
   }
 abstract Pizza createPizza(String type);
}

此时,一个工厂的client或许可以对应多个工厂;而每个工厂可以把创建对象的代码在其中封装成一个方法,方便使用。

  • [ ] 工厂方法在工厂1,工厂2中。

抽象方法

abstract Product factoryMethod(String type)

abstract:工厂方法是抽象的,因此依赖于子类来处理对象创建

Product:工厂方法返回一个Product,通常在Creator中定义的方法中使用

工厂方法:工厂方法使creator(父类中的代码)不知道具体创建了什么样的Product,只是对抽象的Product的对象进行处理

String type:工厂方法可以参数化(也可以不),以在Product的几个子类中进行选择

“Open for Extension, Closed for Modification”

Dependency Inversion依赖倒置

The Abstract Factory

抽象工厂模式提供了一个接口,用于创建一系列相关或依赖的对象,而无需指定它们的具体类。

 我感觉抽象工厂需要自己写一写代码才能理解,有机会再把代码发上来。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值