zoukankan      html  css  js  c++  java
  • 34、面向对象设计模式之工厂模式——简单工厂模式与工厂方法模式比较

    用下面的例子比较:

      

    using System;
    
    namespace LearnObject
    {
        public class LeiFeng
        {
            public void Sweep()
            {
                Console.WriteLine("扫地");
            }
            public void Wash()
            {
                Console.WriteLine("洗衣服");
            }
    
            public void BuyRice()
            {
                Console.WriteLine("买米");
            }
        }
        public class Undergrade : LeiFeng
        {
    
        }
    
        public class Volunteer : LeiFeng
        {
    
        }
    
        public class SimpleLeiFengFactory
        {
            public static LeiFeng CreateLeiFeng(string typeName)
            {
                LeiFeng result = null;
                switch (typeName)
                {
                    case "学雷锋的大学生":
                        result = new Undergrade();
                        break;
                    case "社区志愿者":
                        result = new Volunteer();
                        break;
                }
                return result;
            }
        }
        public interface IFactory
        {
            LeiFeng CreateLeiFeng();
        }
        public class UndergradeFactory : IFactory
        {
            public LeiFeng CreateLeiFeng()
            {
                return new Undergrade();
            }
        }
        public class VolunteerFactory : IFactory
        {
            public LeiFeng CreateLeiFeng()
            {
                return new Volunteer();
            }
        }
        public class Program
        {
            public static void Main(string[] args)
            {
                // 不使用工厂实例化
                LeiFeng zhangsan = new Undergrade();
                zhangsan.BuyRice();
                zhangsan.Sweep();
                zhangsan.Wash();
                LeiFeng student1 = new Undergrade();
                student1.BuyRice();
                student1.Sweep();
                student1.Wash();
    
                //简单工厂实例化
                LeiFeng studentA = SimpleLeiFengFactory.CreateLeiFeng("学雷锋的大学生");
                studentA.BuyRice();
                studentA.Sweep();
                studentA.Wash();
    
                LeiFeng volunteer = SimpleLeiFengFactory.CreateLeiFeng("社区志愿者");
                volunteer.BuyRice();
                volunteer.Sweep();
                volunteer.Wash();
    
                //工厂方法实例化
                IFactory factory = new UndergradeFactory();
                LeiFeng student = factory.CreateLeiFeng();
                student.BuyRice();
                student.Sweep();
                student.Wash();
                factory = new VolunteerFactory();
                LeiFeng volunteer1 = factory.CreateLeiFeng();
                volunteer1.BuyRice();
                volunteer1.Sweep();
                volunteer1.Wash();
            }
        }
    }

      

  • 相关阅读:
    H01-Linux系统中搭建Hadoop和Spark集群
    L07-Linux配置ssh免密远程登录
    L06-Ubuntu系统中部署Vagrant和VirtualBox
    P03-Python装饰器
    L05-Linux部署msmtp+mutt发送邮件
    O01-Linux CentOS7中利用RDO部署OpenStack
    L03-Linux RHEL6.5系统中配置本地yum源
    LoggerFactory.getLogger用法
    maven配置本地和远程仓库
    Jmeter下载安装配置及使用(windows)
  • 原文地址:https://www.cnblogs.com/sy-liu/p/13159591.html
Copyright © 2011-2022 走看看