zoukankan      html  css  js  c++  java
  • 设计模式学习总结3 创建型3 FactoryMethod工厂方法模式

     FactoryMethod工厂方法模式(创建型)


    作用:

    工厂方法模式是一种创建型模式,它是由子类来决定实例哪个类,多个子类都实现了接口,工厂方法根据客户端或当前状态的外部提供的信息实例化对应的子类。

    Role
    The  Factory  Method  pattern  is  a  way  of  creating  objects,  but  letting  subclasses decide exactly which class to instantiate. Various subclasses might implement the interface; the Factory Method instantiates the appropriate subclass based on infor-
    mation supplied by the client or extracted from the current state.

    设计:

    IProduct,要实例化子类的接口
    ProductA and ProductB,实现了IProduct接口的子类
    ProductFactory,提供工厂方法来实例化所需的子类
    CreateProduct,决定实例化哪个子类

    举例:

    ProductFactory,钢笔店 
    CreateProduct,根据客户要求提供各类钢笔
    ProductA,英雄钢笔
    ProductB,永生钢笔
    IProduct,钢笔的规范:书写,加墨
    实现:

    代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace FactoryMethod
    {

       
    class Program
        {

            
    static void Main(string[] args)
            {
                  Creator c 
    = new Creator();
                  IProduct product;

                  
    for (int i=1; i<=12; i++
                  {
                    product 
    = c.FactoryMethod(i);
                    Console.WriteLine(
    "Avocados "+product.ShipFrom());
                  }
            }
        }


                 
    // Factory Method Pattern           Judith Bishop  2006
                 interface IProduct {
                  
    string ShipFrom();
                 }

                
    class ProductA : IProduct {
                  
    public String ShipFrom () {
                    
    return " from South Africa";
                  }
                }

                
    class ProductB : IProduct {
                  
    public String ShipFrom () {
                    
    return "from Spain";
                  }
                }

                
    class DefaultProduct : IProduct {
                  
    public String ShipFrom () {
                    
    return "not available";
                  }
                }

                
    class Creator {
                  
    public IProduct FactoryMethod(int month) {
                    
    if (month >= 4 && month <=11)
                        
    return new ProductA();
                    
    else
                    
    if (month == 1 || month == 2 || month == 12)
                        
    return new ProductB();
                    
    else return new DefaultProduct();
                  }
                }
     
    }

    使用场景:

    当系统中灵活性非常重要;
    由工厂方法来决定选择哪个子类;

  • 相关阅读:
    一个陌生女人的来信 Brief einer Unbekannten
    占星术的历史与流变
    占星术基础知识(星座及其标志)
    _________ 公告栏___________
    意识科学初步:David Chalmers的简单问题与困难问题
    意识科学初步:David Chalmers的简单问题与困难问题
    科研笔记(2019年01月29日01:17:57):Python写用于交付的工程项目的基本流程
    中国知网(cnki)上caj格式转pdf的方法
    灰色关联度分析(Grey Relation Analysis,GRA)原理详解
    货币金融学(米什金)笔记:金融体系、货币相关
  • 原文地址:https://www.cnblogs.com/utopia/p/1675510.html
Copyright © 2011-2022 走看看