• 设计模式 工厂-Factory


    在开始笔记之前先推荐一个网站:http://design-patterns.readthedocs.org/zh_CN/latest/index.html

    网站对每一个Pattern都有详尽的解说。并且都有UML图帮助理解记忆。

    工厂模式(Factory)

    属于创建型模式,解决创建对象代码重复的问题。同时使抽象对象不依赖于具体对象。

    按照不同的层次有3种实现方法:简单工厂,工厂方法,抽象工厂

    简单工厂 Simple Factory

    严格来说简单工厂算不上是一种设计模式。其更像一种编程习惯。即将重复的代码进行封装重用。

    Head First例子

    在PizzaStore类中有OrderPizza方法。方法中根据不同的要求创建Pizza,然后切块,包装。引入简单工厂,将原来在OrderPizza中的具体创建Pizza的new代码(一长串的if else if),移到PizzaFactory中。达到重用,依赖倒置的效果。

    依赖倒置;依赖抽象不依赖具体

    dependency inversion; depend on abstractions not concrete classes

    Origianl Bad Design: PizzaStore ---> various Pizza

    New Good Design: PizzaStore ---> Pizza <--- variouse Pizza

     

    工厂方法 Factory Method

    创建者包含一个工厂方法。在具体的使用者中实现工厂方法create()创建具体的产品。在这里有两个平行的类族。使用者类族和产品类族。特征是抽象创建者中包含一个抽象的工厂方法。但具体实现留给子类。

    Head First例子

    不同的地区有PizzaStore加盟店。OrderPizza的逻辑不变。不同的地域风味PizzaStore继承PizzaStore。在各自的creatPizza方法中创建地域风味Pizza。

     

    抽象工厂 Abstract Factory

    产品包含一系列原料。创建一个工厂的类族,包含创建一系列具体原料的方法。具体产品的prepare()方法中,使用抽象工厂初始化自己的原料。如工厂方法中,使用者也是一个类族。具体使用者的工厂方法create()中创建具体的工厂,然后将具体工厂传给具体产品进行构造。

    Head First例子

    不同的Pizza(芝士,蔬菜)包含不同的原料。相同类型的Pizza,在不同的地域,要使用该地域的原料。在准备原料时,具体Pizza需要一个抽象原料工厂,去创建原料。

    每一种原料都是一个类族。抽象原料和具体不同地域风味原料。

    工厂类族,具体的工厂创建不同的地域风味原料。

    在加盟的地域PizzaStore中,实现create()方法。创建原料工厂。参数指示创建何种具体Pizza。将工厂传给具体Pizza,创建具体Pizza。返回抽象的Pizza。

    下图的Client是ConcretePizza

  • 相关阅读:
    IE8下,时间函数问题
    sublime有时候用快捷键时出现的是css的快捷键
    热词高亮并去重
    关于百分比的margin
    手机端后退功能
    CSS3小水滴代码
    关于Gmapping的学习2
    关于概率运动模型
    A*算法的学习
    经典ICP算法
  • 原文地址:https://www.cnblogs.com/JackMa/p/5321577.html
Copyright © 2020-2023  润新知