ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

简单工厂模式

2019-11-03 17:00:22  阅读:245  来源: 互联网

标签:子类 Cry Dog 模式 工厂 Animal 简单 Cat public


 

代码说明:一个动物基类Animal,两个子类分别是猫Cat和狗Dog。对于动物的叫声的调用,使用工厂CryFactory.Cry来选择对象进行实例后调用。

 

1.代码实现

using System;

namespace mydotnet
{
    class Program
    {
        static void Main(string[] args)
        {
            foreach(var arg in args)
            {
                Animal animal = CryFactory.Cry(arg);
                animal.Cry();
            }
        }
    }

    public class CryFactory
    {
        public static Animal Cry(string type)
        {
            switch(type)
            {
                case "Cat":
                    return new Cat();
                case "Dog":
                    return new Dog();
                default:
                    return new Animal();
            }
        }
    }

    public class Animal
    {
        public virtual void Cry()
        {
            Console.WriteLine("^");
        }
    }

    public class Cat:Animal
    {
        public override void Cry()
        {
            Console.WriteLine("喵喵");
        }
    }

    public class Dog:Animal
    {
        public override void Cry()
        {
            Console.WriteLine("汪汪");
        }
    }

}

2.运行

vscode 运行: dotnet run "Cat"  (args直接在run后面可以设置值,多个值用逗号隔开)

3.面向对象

简单工厂模式非常适合设计模式的入门,而且很好的使用了面向对象的三大特性:封装、继承、多态。

  封装,即为抽象出一个类,说白了就是归类。Animal、Cat、Dog都是封装出来的类。

    每个对象都包含它能进行操作所需要的所有信息,这个特性称为封装,因此对象不必依赖其他对象来完成自己的操作。

  继承,Cat和Dog都继承自Animal,子类会继承父类所有的特性,子类还可以定义新的特性,子类还可以用自己的方式实现父类的功能(override virtual)。

  多态,不同的对象可以执行相同的动作,但要通过它们自己的实现代码来执行,需要注意几点:

    1.子类以父类的身份出现

    2.子类工作时以自己的方式来实现

    3.子类以父类的身份出现时,子类特有的属性和方法不可以使用

4.简单工厂模式

  简单工厂模式用于解决“switch的复用”问题

    以代码为例,对于动物的不同,调用不用的动作时,switch的操作不应再过程中编写,而应该提炼出来。

 

标签:子类,Cry,Dog,模式,工厂,Animal,简单,Cat,public
来源: https://www.cnblogs.com/wangliuwei/p/11788019.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有