zoukankan      html  css  js  c++  java
  • 四、工厂模式

    1. 简单工厂

    一个实现了简单工厂的UML类图:(简单工厂


    说明
       1、客户通过在PizzaStore通过SimplePizzaFactory取得Pizza的实例。
       2、SimplePizzaFactory是应用中唯一用到具体Pizza产品的地方
       3、Pizza定义为抽象类,具有一些有用的实现(但不是必须的),这些实现也可以被覆盖
       4、CheesePizza、VeggiePizza、CalmPizza、PepperonPizza 是具体的Pizza实现。每个产品必须实现Pizza接口,并设计成具体类。这样一来,就可以被工厂创建,并返回给客户
    个人理解:简单工厂其实不是设计模式,更像是一种编程习惯。

    2.工厂方法

    一个实现了工厂方法的UML类图:(工厂方法


    定义:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
    个人理解:简单工厂把全部的事情,在一个地方全部都处理完成了。然而工厂方法确是创建一个框架,让子类决定如何实现。比如说,在工厂方法中,orderPizza() 方法提供了一般的框架,以便创建pizza,orderPizza() 方法依赖工厂方法创建具体类,并创造出实际的pizza。可通过继承PizzaStore类,决定实际创造出的pizza是什么。简单工厂的做法,可已将对象的创建封装起来,但是简单工厂不具备工厂方法的弹性,因为简单工厂不能变更正在创建的产品。

    3.抽象工厂

    一个实现了抽象工厂的的UML类图:(抽象工厂


    定义:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
    个人理解:抽象工厂允许客户使用抽象的接口来创建一组相关产品,而不需要关心实际生产出来的具体产品是什么。这样一来客户就从具体的产品中被解耦。
    工厂方法对比抽象工厂:
    1、抽象工厂和工厂方法都是负责创建对象(工厂方法用的是继承,抽象工厂用的是对象组合)。
    2、整个工厂方法就是通过子类来创建对象。用这种做法,客户只需要知道他们所使用的抽象类型就可以了,而由子类负责决定具体类型。所以,工厂方法负责将客户从具体类型中解耦。(抽象工厂提供一个用来创建一个产品家族的抽象类型,这个类型由子类定义了产品被产生的方法。要想使用这个工厂,必须先实例化它,然后传入到一些针对抽象类所写的代码中。所以,和工厂方法一样,抽象工厂把客户从使用的具体产品中解耦)。
    3、抽象工厂的优点是可以把一群相关的产品集合起来(如果这些相关的产品需要增加,那么就必须修改这个抽象,因为这是在创建一个大的产品家族)。
    4、抽象工厂经常会使用工厂方法来实现具体的工厂(但是具体的工厂只是用来创建产品而已)。
    5、对于工厂方法而言,抽象创建者中实现的代码经常会用到子类所创建的具体类型。
    6、对于抽象工厂和工厂方法的使用上,如果想要创建产品家族或者让制造的相关产品集合起来,可以使用抽象工厂。
    如果客户代码需要从实例化的具体类中解耦,或者目前而言不知道实例化那些具体类的时候,可以使用工厂方法(工厂方法的使用很简单,只要继承为子类,并覆盖相应的工厂方法就可以了)。

  • 相关阅读:
    待写
    让一个小div在另一个大div里面 垂直居中的四种方法
    20 个有用的 SVG 工具,提供更好的图像处理
    php原理简述
    Apache 打开网页的时候等待时间过长的解决方案
    TCP协议中的三次握手和四次挥手(图解)
    apache 各平台进程线程模块解析
    浅谈移动Web开发(上):深入概念
    响应式布局
    jQuery Mobile 入门教程
  • 原文地址:https://www.cnblogs.com/huacesun/p/6622500.html
Copyright © 2011-2022 走看看