• 设计模式学习工厂方法模式


    在C#中应用工厂模式

    工厂方法模式来自于创建模式的分类,创建模式是最好的处置创建对象的方式,工厂方法提供了一个简单的
    决策,该决策得出了这样一个类,该类能够返回一个抽象基类的几个子类的对象,这里抽象基类以来与提供的
    信息.

    "为每一个创建的对象定义一个接口,但是让子类决定由哪个类去初始化,工厂方法让一个类遵从子类的指令去初始
    化."   --"设计模式"  Gamma et al., Addison-Wesley, ISBN:0-201-63361-2" 

    非软件实例

    喷射模型展示了这种模式, 朔料玩具厂处理熟料模型粉末,并且喷射朔料到设计好造型的模子里, 这个玩具类被
    模子决定了,

    一个工厂模型是一个返回几个可能的类之一的一个实例,这几个可能的类依赖于提供给它们的数据,一般来讲,
    所有的类都应该有一个通用的基类和通用的方法,但是方法的实现可能不同.

    下面的 UML 表示了工厂方法模式,在这个例子中,我们没有直接创建类Derived1 和Derived2 ,而是使用
    工厂类的 getObject() 方法,根据传递的参数去返回一个合适的实例.这样的方法一般叫做工厂方法.工厂
    方法可以是静态的也可以是非静态的.



    C#中实现工厂方法:

        //Creational Pattern: The Factory Method
        
    //In Factory method pattern, 
        
    //A Factory class contains a factory method is used for creating the object. 
        
    //This factory method can be either static or non-static.

        
    class Factory
        
    {
            
    public Base GetObject(int type)
            
    {
                Base base1 
    = null;
                
    switch (type)
                
    {
                    
    case 1:
                        base1 
    = new Derived1();
                        
    break;
                    
    case 2:
                        base1 
    = new Derived2();
                        
    break;
                }

                
    return base1;
            }

        }

        
    interface Base
        
    {
            
    void DoIt();
        }

        
    class Derived1 : Base
        
    {
            
    public void DoIt()
            
    {
                Console.WriteLine(
    "Derived 1 method");
            }

        }

        
    class Derived2 : Base
        
    {
            
    public void DoIt()
            
    {
                Console.WriteLine(
    "Derived 2 method");
            }

        }

        
    //--------Client class----------
        
    //Client class needn't know about instance creation. 
        
    //The creation of Product is 
        
    //deferred to the Factory class
        class MyClient
        
    {
            
    public static void Main()
            
    {
                Factory factory 
    = new Factory();//Decides which object must create.
                Base obj = factory.GetObject(2);
                obj.DoIt();
            }

        }

    这就是工厂方法的基本规则, 我们创建了一个抽象,这个抽象决定了哪几个可能的类被返回, 并且返回一个.之后
    我们就能够调用类实例的方法,甚至不需要实际上在使用被继承类是哪一个,对象的建立发生在工厂类内的一个
    单独的地方.

    记住工厂类可以包含很多个工厂方法,甚至这些工厂方法能够是静态或者非静态.


  • 相关阅读:
    2016"百度之星"
    codeforces 55 div2 C.Title 模拟
    codeforces 98 div2 C.History 水题
    codeforces 97 div2 C.Replacement 水题
    codeforces 200 div2 C. Rational Resistance 思路题
    bzoj 2226 LCMSum 欧拉函数
    hdu 1163 九余数定理
    51nod 1225 余数的和 数学
    bzoj 2818 gcd 线性欧拉函数
    Codeforces Round #332 (Div. 2)D. Spongebob and Squares 数学
  • 原文地址:https://www.cnblogs.com/flyinthesky/p/1218500.html
Copyright © 2020-2023  润新知