工厂方法模式

 

 

 

 

 

 

下面用一个例子解释:

 

 

2个接口:电视及洗衣机

1个抽象工厂

2个具体电视机类 ,2个具体洗衣机类 ,2个具体工厂类

一个客户端

 

复制代码
 //TV接口
namespace
FactoryMethodModel { interface ITV { string play(); }
}

复制代码

 

复制代码
  class HaierTV:ITV
    {

        public string play()
        {
            string str = "Haier电视正在播放....";
            return str;
        }
    }
  class TCLTV : ITV
    {

        public string play()
        {
            string str = "TCL电视正在播放....";
            return str;
        }
    }
复制代码
复制代码
namespace FactoryMethodModel
{
    interface IWashing
    {
        string washing();
    }

    class HaierWashingMachine:IWashing
    {

        public string washing()
        {
            string str = "Haier洗衣机正在洗涤....";
            return str;
        }
    }

  class TCLWashingMachine:IWashing
    {

        public string washing()
        {
            string str = "TCL 洗衣机洗涤中....";
            return str;
        }
    }
}
复制代码
复制代码
namespace FactoryMethodModel
{
    abstract class AbstractFactory
    {
        public abstract ITV productTV();
        public abstract IWashing productWashing();
    }
   class HaierFactory:AbstractFactory
    {

        public override ITV productTV()
        {
            return new TCLTV();
        }

        public override IWashing productWashing()
        {
            return new HaierWashingMachine();
        }
    }
   class TCLFactory:AbstractFactory
    {

        public override ITV productTV()
        {
            return new TCLTV();
        }

        public override IWashing productWashing()
        {
            return new TCLWashingMachine();
        }
    }

}
复制代码

 

复制代码
/*工厂方法模式*/
namespace FactoryMethodModel
{
    class Client
    {
        static void Main(string[] args)
        {
            //TotalFactory t = new TotalFactory(); //监护所有的工厂
            //t.SetFactory(new TCLFactory());
            TotalFactory t = new TotalFactory(new TCLFactory()); 
            Console.WriteLine(t.productTV().play());   
            Console.WriteLine(t.productWashingMachine().washing());
            Console.ReadKey();
        }
    }
}
复制代码

 

复制代码
//为了方便管理可以创建一个总工厂用来管理所有工厂
namespace FactoryMethodModel
{
    class TotalFactory
    {

        AbstractFactory abstractFactory;
        ITV tv;
        IWashing wash;
        Type factoryType;
        public TotalFactory()
        {

        }
        public TotalFactory(AbstractFactory factory)
        {
            SetFactory(factory);
        }
        public void SetFactory(AbstractFactory factory)
        {
            factoryType = factory.GetType();
            GetFactoryByType();
            abstractFactory = GetFactoryByType();
            tv = abstractFactory.productTV();
            wash = abstractFactory.productWashing();
        }
        public  AbstractFactory GetFactoryByType()
        {
            if (factoryType == typeof(TCLFactory))
            {
                return new TCLFactory();
            }
            else if (factoryType == typeof(HaierFactory))
            {
                return new HaierFactory();
            }
            else
            {
                return null;
            }
        }
        public ITV productTV()
        {
           return  tv;
        }
        public IWashing productWashingMachine()
        {
           return wash;
        }
    }
}
复制代码

 

posted @   游戏鼻祖  阅读(198)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示