设计模式(3)——工厂设计模式

1.概述:
–>定义一个用于创建对象的工厂接口,让工厂子类决定将哪一个产品类实例化。此模式让一个产品类的实例化延迟到工厂子类。

2.实现:
–>先定义一个抽象产品类,包含产品类的公共代码
–>再定义一个抽象工厂类,用一个方法返回一个具体的产品类
–>分别实现具体的产品类,和对应的具体工厂类

3.代码:

//抽象产品类
internal interface Logger
    {
        void WriteLog();
    }

  //抽象工厂
    internal interface LoggerFactory
    {
        Logger CreateLogger();
    }


  //具体产品类
    internal class DataBaseLogger : Logger
    {
        public DataBaseLogger()
        {
            Console.WriteLine("数据库日志创建");
        }

        public void WriteLog()
        {
            Console.WriteLine("数据库日志写入");
        }
    }

    //具体工厂类
    internal class DataBaseLoggerFactory : LoggerFactory
    {
        public DataBaseLoggerFactory()
        {
        }

        public static Logger GetLogger()
        {
            DataBaseLoggerFactory db = new DataBaseLoggerFactory();
            return db.CreateLogger();
        }

        public Logger CreateLogger()
        {
            return new DataBaseLogger();
        }
    }

    //具体产品类
    internal class FileLogger : Logger
    {
        public FileLogger()
        {
            Console.WriteLine("文件日志创建");
        }

        public void WriteLog()
        {
            Console.WriteLine("文件日志写入中");
        }
    }

    //具体工厂类
    internal class FileLoggerFactory : LoggerFactory
    {
        public FileLoggerFactory()
        {
        }

        public Logger CreateLogger()
        {
            return new FileLogger();
        }

        public Logger GetLogger()
        {
            FileLoggerFactory ff = new FileLoggerFactory();
            return ff.CreateLogger();
        }
    }

4.工厂方法的隐藏:
–>我们可以在抽象工厂类中添加调用产品类的业务方法,让客户直接调用工厂中的方法就可以不需要创建产品对象。

internal abstract class LoggerFactory
    {
//客户端就可以用抽象工厂类的实例来调用产品类的业务方法
        public void WriteLog()
        {
            Logger logger = this.CreateLogger();
            logger.WriteLog();
        }
      public  Logger CreateLogger();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值