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();
            }
        }
    }

      

  • 相关阅读:
    UVa 116 单向TSP(多段图最短路)
    POJ 1328 Radar Installation(贪心)
    POJ 1260 Pearls
    POJ 1836 Alignment
    POJ 3267 The Cow Lexicon
    UVa 1620 懒惰的苏珊(逆序数)
    POJ 1018 Communication System(DP)
    UVa 1347 旅行
    UVa 437 巴比伦塔
    UVa 1025 城市里的间谍
  • 原文地址:https://www.cnblogs.com/sy-liu/p/13159591.html
Copyright © 2011-2022 走看看