zoukankan      html  css  js  c++  java
  • 简单工厂模式、工厂模式、抽象工厂模式

    1.简单工厂模式:调用类只需要向工厂类请求方法,由工厂决定创建出哪个类的实例,而不需要关心被调用类的实现过程。

    优势:调用类 和 被调用类分离,调用类需要时只需要向工厂请求,避免了调用类和被调用类之间的硬耦合。

    缺陷:被调用类更改 工厂类也需要同步更改。

    实例:

     public interface IAnimal
        {
            void Eat();
        }
        public class Cat : IAnimal
        {
            public void Eat()
            {
                Console.WriteLine("我是小猫咪,当然吃鱼了..");
            }
        }
        public class Dog : IAnimal
        {
            public void Eat()
            {
                Console.WriteLine("我是小狗狗,记得给我带骨头来啊..");
            }
        }
    
        public class AnimalFactory
        {
            public IAnimal GetAnimal(string animalType)
            {
                if (animalType=="cat")
                {
                    return new Cat();
                }
                if (animalType=="dog")
                {
                    return new Dog();
                }
                return null;
            }
        }
    
      class Program
        {
            static void Main(string[] args)
            {
                IAnimal animal;
                animal = new AnimalFactory().GetAnimal("cat");
                animal.Eat();
                Console.WriteLine("----------------");
    
                animal = new AnimalFactory().GetAnimal("dog");
                animal.Eat();
                Console.ReadLine();
            }
        }
    View Code

    2.工厂模式:如果我们不想在工厂类中加判断,可以为不同的类提供不同的工厂,不同的工厂生产不同的产品。

    缺陷:调用类和工厂类之间存在硬编码耦合。

    实例:

      public interface IAnimal
        {
            void Eat();
        }
        public class Cat : IAnimal
        {
            public void Eat()
            {
                Console.WriteLine("我是小猫咪,当然吃鱼了..");
            }
        }
        public class Dog : IAnimal
        {
            public void Eat()
            {
                Console.WriteLine("我是小狗狗,记得给我带骨头来啊..");
            }
        }
    
        public class CatFactory
        {
            public IAnimal GetAnimal()
            {
                
                    return new Cat();
             }
        }
    
        public class DogFactory
        {
            public IAnimal GetAnimal()
            {
    
                return new Dog();
            }
        }
    
     class Program
        {
            static void Main(string[] args)
            {
                IAnimal animal;
                animal = new CatFactory().GetAnimal();
                animal.Eat();
                Console.WriteLine("----------------");
    
                animal = new DogFactory().GetAnimal();
                animal.Eat();
                Console.ReadLine();
            }
        }
    View Code

    3.抽象工厂: 使用简单工厂模式,需要在工厂类增加逻辑判断,而使用工厂模式,又造成了调用类和工厂类的硬编码耦合,所以我们可以在新建一个类,这个类不制造具体的被调用对象,而是只制造工厂对象。

    实例:

      public interface IAnimal
        {
            void Eat();
        }
        public class Cat : IAnimal
        {
            public void Eat()
            {
                Console.WriteLine("我是小猫咪,当然吃鱼了..");
            }
        }
        public class Dog : IAnimal
        {
            public void Eat()
            {
                Console.WriteLine("我是小狗狗,记得给我带骨头来啊..");
            }
        }
    
    
        public  interface IFactory{
            IAnimal GetAnimal();
        }
    
        public class CatFactory:IFactory
        {
            public IAnimal GetAnimal()
            {
                
                    return new Cat();
             }
        }
    
        public class DogFactory : IFactory
        {
            public IAnimal GetAnimal()
            {
    
                return new Dog();
            }
        }
    
    
        public class AbstractFactory
        {
            public IFactory GetFactory(string factoryname)
            {
                if (factoryname == "cat")
                {
                    return new CatFactory();
                }
                if (factoryname == "dog")
                {
                    return new DogFactory();
                }
                return null;
            }
        }
    
     class Program
        {
            static void Main(string[] args)
            {
                IFactory factory;
                factory = new AbstractFactory().GetFactory("cat");
                factory.GetAnimal().Eat();
                Console.WriteLine("----------------");
    
                factory = new AbstractFactory().GetFactory("dog");
                factory.GetAnimal().Eat();
                Console.ReadLine();
            }
        }
    View Code
  • 相关阅读:
    HDU 4118:Holiday's Accommodation 简单树形DP(2011 Asia ChengDu Regional Contest )
    HDU 4276:The Ghost Blows Light 树形DP(2012 ACM/ICPC Asia Regional Changchun Online )
    HDU 3586:Information Disturbing 树形DP+二分
    HDU 4044:GeoDefense 树形DP+分组背包
    HDU 4003:Find Metal Mineral 树形DP+分组背包
    HDU 2196:Computer 树形DP
    Codeforces 681D:Gifts by the List (dfs+topsort)
    Codeforces 681C:Heap Operations
    跨浏览器注册事件和移除事件方案
    jquery 清空表达内容
  • 原文地址:https://www.cnblogs.com/mili3/p/7615256.html
Copyright © 2011-2022 走看看