zoukankan      html  css  js  c++  java
  • 简单工厂模式

    一、概述
    简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。 -------------来自百度百科

    优点

    工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。

    缺点

    由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。

    当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利;

    这些缺点在工厂方法模式中得到了一定的克服。

    使用场景

    工厂类负责创建的对象比较少;

    客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;

    由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。

    实现例子如下:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Text;
     4 
     5 namespace 封装_继承_多态_简单工厂模式
     6 {
     7     /// <summary>
     8     /// 算法基类
     9     /// </summary>
    10     public class operaTion
    11     {
    12         public int numberA { get; set; }
    13 
    14         public int numberB { get; set; }
    15 
    16         public virtual int getResult()
    17         {
    18             return 0;
    19         }
    20     }
    21 
    22     /// <summary>
    23     /// 加法
    24     /// </summary>
    25     public class operaTionAdd : operaTion
    26     {
    27         public override int getResult()
    28         {
    29             return numberA + numberB;
    30         }
    31     }
    32 
    33     /// <summary>
    34     /// 减法
    35     /// </summary>
    36     public class operaTionSubtraction: operaTion
    37     {
    38         public override int GetHashCode()
    39         {
    40             return numberA - numberB;
    41         }
    42     }
    43 
    44     /// <summary>
    45     /// 创建工厂
    46     /// </summary>
    47     public class Factory
    48     {
    49         public static operaTion create(string type)
    50         {
    51             operaTion op = null; ;
    52             switch (type)
    53             {
    54                 case "+": { op= new operaTionAdd(); };break;
    55                 case "-": { op= new operaTionAdd(); }; break;
    56             }
    57             return op;
    58         }
    59     }
    60 }
  • 相关阅读:
    IDEA中实现接口时注解@Override报错的解决方法
    从源码分析:分析Java中的StringBuilder
    人工智能,机器学习 书籍推荐
    完美解决 scipy.misc.imread 报错 TypeError: Image data cannot be converted to float
    Python这些位运算的妙用,绝对让你大开眼界
    ubuntu vmware kernel module updater
    unzip:unzip解压文件到指定目录
    设置python 虚拟环境 virtualenv django 虚拟环境
    ubuntu sublime text3 python 配置 sublime text3 python 配置
    Linux下切换python2和python3
  • 原文地址:https://www.cnblogs.com/liangdejiu/p/11240825.html
Copyright © 2011-2022 走看看