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桌腿这样组合的怪产品了(否则厂长都下岗了 :))。
  • 相关阅读:
    win8装oracle 10g 弹出:环境变量path的值超过1023字符,无法设置改值
    Modern UI for WPF 开源项目(3):用模板创建我的第一个Modern UI app
    安装oracle11G,10G时都会出现:注册ocx时出现OLE初始化错误或ocx装载错误对话框
    win8快捷键
    Win7/Win8 系统下安装Oracle 10g 提示“程序异常终止,发生未知错误”的解决方法
    Delphi FireDAC 连接SQL Server一些要注意的地方
    Delphi XE5 for Android (四)
    Delphi D10.X VCL和FireMonkey之间的常见差异介绍
    delphi给App授予权限
    github无法登陆的解决办法
  • 原文地址:https://www.cnblogs.com/Winston/p/1195165.html
Copyright © 2011-2022 走看看