简单工厂模式
时间:2019-11-03
本文章向大家介绍简单工厂模式,主要包括简单工厂模式使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
代码说明:一个动物基类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的操作不应再过程中编写,而应该提炼出来。
原文地址:https://www.cnblogs.com/wangliuwei/p/11788019.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- C# 如何给Winform的button等控件添加快捷键 By HKL,
- kmskeys10 By HKL, Saturday 7
- C# Random 生成不重复随机数 By HKL, We
- Resin4配置 By HKL, Thursday 11
- 从源码编译N(ginx)+M(ySQL)+P(HP)并安装WordPress By HKL,
- MPEG4视频中,I帧、p帧、B帧的判定(转载) By HKL,
- 使用attrib命令解决存储器中毒后文件夹被隐藏的方法 By HKL,
- 在Archlinux上通过qemu运行ReactOS By HKL,
- Archlinux下解决wireshark普通用户抓包权限问题 By HKL,
- 使用jemalloc对nginx进行优化 By HKL,
- 配置IIS6+PHP5.6+MySQL5 By HKL,
- haproxy与nginx集成实例 By HKL, Wed
- 通过JavaScript实现HTTP到HTTPS的强制跳转 By HKL,
- 在Windows10 Bash中默认启动其他shell By HKL,
- 基于R的竞争风险模型的列线图