zoukankan      html  css  js  c++  java
  • factory method随想1


    public abstract class Fruit
    {
        
    public abstract void Wash();
        
    public abstract void Hush();
    }

    class Apple:Fruit
    {
        
    public override void Wash()
        
    {}
        
    public override void Hush()
        
    {}
    }

    class Orange:Fruit
    {
        
    public override void Wash()
        
    {}
        
    public override void Hush()
        
    {}
    }

    public abstract class FruitFactory
    {
        
    public abstract Fruit Create();
    }

    public class AppleFactory
    {
        
    public override Fruit Create()
        
    {
            
    return new Apple();
        }

    }

    public class OrangeFactory
    {
        
    public override Fruit Create()
        
    {
            
    return new Orange();
        }

    }

    class App
    {
        
    public static void Main()
        
    {
            FruitFactory fruitFactory
    =new AppleFactory();
            
    //FruitFactory fruitFactory=Assembly.Load("AssemblyName").CreateInstrance("AppleFactory");

            CleanFruit(fruitFactory);
        }


        
    public static void CleanFruit(FruitFactory fruitFactory)
        
    {
            Fruit fruit
    =fruitFactory.Create();
            fruit.Wash();
            fruit.Hush();
        }

    }


    //很典型的Factory Method。可是我觉得烦了,看下面的写法。

    public abstract class Fruit
    {
        
    public abstract void Wash();
        
    public abstract void Hush();
    }

    class Apple:Fruit
    {
        
    public override void Wash()
        
    {}
        
    public override void Hush()
        
    {}
    }

    class Orange:Fruit
    {
        
    public override void Wash()
        
    {}
        
    public override void Hush()
        
    {}
    }

    public class FruitFactory
    {
        
    public static Fruit Create()
        
    {
            Fruit fruit
    =Assembly.Load("AssemblyName").CreateInstrance("Apple");
        }

    }

    class App
    {
        
    public static void Main()
        
    {
            CleanFruit();
        }

        
    public static void CleanFruit(FruitFactory fruitFactory)
        
    {
            Fruit fruit
    =fruitFactory.Create();
            fruit.Wash();
            fruit.Hush();
        }

    }

    //在这个实例中,同样实现了动态灵活。可为什么会写出这样的代码,因为我不是按照模式来写的,而是根据我想达到的目的来写的。
    //这样的代码没错,它用反射的特性很好地解决了我目前的问题,那是不是就不要factory method了?
    //当然不是的。这是factory method很重要的。这里引用terrylee的原话:工厂的作用并不仅仅只是创建一个对象,它还可以做对象的初始化,参数的设置等。
    //这里说下我的观点。做对象的初始化,我想这是不必要的,可在对象的构造器中去做,真正重要的是对参数的设置。

  • 相关阅读:
    POJ 3710 Christmas Game#经典图SG博弈
    POJ 2599 A funny game#树形SG(DFS实现)
    POJ 2425 A Chess Game#树形SG
    LeetCode Array Easy 122. Best Time to Buy and Sell Stock II
    LeetCode Array Easy121. Best Time to Buy and Sell Stock
    LeetCode Array Easy 119. Pascal's Triangle II
    LeetCode Array Easy 118. Pascal's Triangle
    LeetCode Array Easy 88. Merge Sorted Array
    ASP.NET MVC 学习笔记之 MVC + EF中的EO DTO ViewModel
    ASP.NET MVC 学习笔记之面向切面编程与过滤器
  • 原文地址:https://www.cnblogs.com/bmrxntfj/p/866366.html
Copyright © 2011-2022 走看看