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的原话:工厂的作用并不仅仅只是创建一个对象,它还可以做对象的初始化,参数的设置等。
//这里说下我的观点。做对象的初始化,我想这是不必要的,可在对象的构造器中去做,真正重要的是对参数的设置。

posted on   bmrxntfj  阅读(341)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
< 2007年8月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8

统计

点击右上角即可分享
微信分享提示