zoukankan      html  css  js  c++  java
  • [创建型模式系列]simple factory & factory method 简单工厂类和工厂方法类的概念及区别

    1.simple factory pattern简单工厂类模式
        simple factory is that all products are produced by the respectice concrete method from simple factory.
        简单工厂类就是所有其产品都是由简单工厂的具体方法来生产的。
        还是以abstract类介绍的桌子生产过程为例。有关桌子生产的相关描述,请参考http://www.cnblogs.com/Winston/archive/2008/05/13/1194995.html
         在简单工厂模式下,生产桌面(不管方形桌面还是圆形桌面)和桌腿(不管大腿还是mini腿)都在一起。
        我们有一个简单工厂类如下:    
    public class SimpeFactory
    {
        public BigLeg Create_BigLeg()
        {
            return new BigLeg();
        }
        public MiniLeg Create_MiniLeg()
        {
            return new Create_MiniLeg();
        }
        public Rectang_Desktop Create_Rectangle_Desktop
        {
            return new Rectangle_Desktop();
        }
        public Circle_Desktop Create_Circle_Desktop
        {
            return new Circle_Desktop();
        }
    }
    public class BigLeg
    {}
    public class MiniLeg
    {}
    public class Rectangle_Desktop
    {}
    public class Circle_Desktop
    {}

    //说明:当然,产品也可以继承于抽象产品类。在各自的产品中实现产品。

    此时,客户端可以根据命令,生产相应的产品,但是产品间是毫无关联的。例如
    SimpeFactory factory=new SimpleFactory();
    Rectangle_Desktop desktop=factory.Create_Rectangle_Desktop();
    MiniLeg leg=factory.Create_Mini_Leg();
    也就是说,有可能我们生产出的是方形桌面和mini腿,或者圆形桌面和大号桌腿。试想如果将这两种产品组装在一起,会是什么样的怪胎!
    这就是简单工厂模式

    2.Factory method pattern工厂方法模式
        Factory method定义一个用于创建对象的接口,让子类决定实例化哪一个类,这种方式叫做lazy initiation.也就是说,对于要生产那一种具体产品,都延迟到相应具体的工厂来创建。
        public abstract class Creator
    {
    public abstract Leg Create_BigLeg();
    public abstract Leg Create_MiniLeg();
    public abstract Desktop Create_Rentangle_Desktop();
    public abstract Desktop Create_Circle_Desktop();
    }
        public class TableCreator:Creator
    {
        public Leg Create_BigLeg()
        {
            return new BigLeg();
        }
        ......
    }
    然后在客户端,我们可以这样调用
    Creator factory=new TableCreator();
    其存在的问题仍然是创建的产品之间毫无关联。

    这时,为了创建一系列相互关联的产品,我们可以创建一系列相互关联或依赖的接口或抽象类,即抽象工厂了。具体可见文章http://www.cnblogs.com/Winston/archive/2008/05/13/1194995.html
    。这样,我们就不可能生产出方形桌面和mini桌腿的产品了。只需要给某个工厂下达命令,该工厂就会生产出相应的产品。至于如何生产的过程,都被encapsulate到了具体工厂里面了(比如mini桌生产工厂,办公桌生产工厂),很显然,每个具体工厂不可能生产出方形桌面和mini桌腿这样组合的怪产品了(否则厂长都下岗了 :))。
  • 相关阅读:
    图解SQL的Join(转)
    MySQ数据表设计
    关于数据库DML、DDL、DCL区别
    SQL多表连接查询
    Xcode报错Expected selector for Objective-C and Expected method body
    Mac上安装使用MYSQL以及Navicat数据库管理和PHP服务器配置
    更换app开发者账号
    Mac 下的 C++ 开发环境
    spring-retry 重试机制
    Ribbon的主要组件与工作流程
  • 原文地址:https://www.cnblogs.com/Winston/p/1195165.html
Copyright © 2011-2022 走看看