30天C#基础巩固-----多态,工厂模式
自己要有自信,相信自己可以找到好的工作。面对校招,企业更加看重自己的基础,这30天就把C#的基础好好的复习,学习下。笔记一定要认真的记录,这样自己复习回顾的时候就有了可以参考的东西了。
一:多态
在面向对象编程中不好理解的就是多态了,很多时候我们只是会使用,但是具体的知识点还不是很透彻,通过下面的示例来学习下多态。
什么是多态:
一个东西(类)在不同的场景下,展示的不同作用(多种状态)。
对象在调用同一个方法的时候表示出多种状态。
这个可以使用父类和子类来更好的区别。<父类统一调用,子类具体实现>
class Person
{
public void PersonInfo()
{
Console.WriteLine("首先,我是个人");
}
}
class ManPerson : Person
{
public void PersonInfo()
{
Console.WriteLine("我是个男人");
}
} class WomenPerson : Person
{
public void PersonInfo()
{
Console.WriteLine("女人");
}
}
定义了一个父类,两个子类。
static void Main(string[] args)
{ ManPerson s =new ManPerson(); //定义一个男人。
s.PersonInfo(); //方法是男人。
Person p = s; //赋值给了人。
p.PersonInfo(); //方法是人。
Console.ReadKey();
}
这里我们可以看到当这个PersonInfo是那个类型的时候,就会调用那个方法。在不同的场景下,拥有不同的表示。
这里可以在子类中使用new来隐藏父类中的方法,当调用子类的方法时,方法是子类的,父类的被隐藏了。
之前讲解的是我们使用new来隐藏,下面是通过override和virtual来看我们的多态。
class Person
{
public virtual void PersonInfo()
{
Console.WriteLine("首先,我是个人");
}
}
class ManPerson : Person
{
public override void PersonInfo()
{
Console.WriteLine("我是个男人");
}
} class WomenPerson : Person
{
public override void PersonInfo()
{
Console.WriteLine("女人");
}
}
virtual:表示我们父类的方法可以被子类重写。override:表示我们子类重写父类的方法。
Person p = null; //定义一个人.
p=new ManPerson(); //利用子类实现不同的意义
p.PersonInfo(); //统一调用父类的方法。
Console.ReadKey();

二:工厂模式
我们把一些复杂的东西,放在一起通过一个工具或者一个方法来实现它,就相当于工厂一样我们可以做很多的事情,我们的代码就是可以放在工厂里面,这样就可以来实现具体的功能,外面不用管我是如何实现的,只需要调用工厂就可以。
案列:USB设备,usb风扇,usb鼠标,通过类库和工厂来实现。
工厂:
/// <summary>
/// usb工厂,这里主要看用户填写的是几,来判断使用那个方法。
/// </summary>
public class UsbFactory
{
public static UsbFac CreateInstance(string type)
{
switch (type)
{
case "1":return new Mouse();
case "2":return new UsbF();
default:
return null;
}
}
}
usb父类:
public class UsbFac
{
public virtual void Insert()
{
Console.WriteLine("usb设备----");
}
}
两个子类:
public class UsbF : UsbFac
{
public override void Insert()
{
Console.WriteLine("usb----风扇转起来了");
}
}
public class Mouse:UsbFac
{
public override void Insert()
{
Console.WriteLine("usb-----鼠标用起来");
}
}
main方法:
static void Main(string[] args)
{
Console.WriteLine("请选择?");
string type = Console.ReadLine();
UsbFac s= UsbFactory.CreateInstance(type);
if (s!=null)
{
s.Insert();
}
else
{
Console.WriteLine("不识别设备");
}
Console.ReadKey();
}
这样做的好处是我们日后更好的维护项目。
多态的理解就到这里,这个还是需要在项目中去慢慢的学习理解。
一个长期的学习方法:

自己也要使用这个方法看以前做过的项目,看里面老大写的方法,是如何写的,如何用的。
30天C#基础巩固-----多态,工厂模式的更多相关文章
- PHP 设计模式 笔记与总结(6)基础设计模式:工厂模式、单例模式和注册树模式
三种基础设计模式(所有面向对象设计模式中最常见的三种): ① 工厂模式:使用工厂方法或者类生成对象,而不是在代码中直接new 在 Common 目录下新建 Factory.php: <?php ...
- 面向对象JS基础讲解,工厂模式、构造函数模式、原型模式、混合模式、动态原型模式
什么是面向对象?面向对象是一种思想!(废话). 面向对象可以把程序中的关键模块都视为对象,而模块拥有属性及方法.这样我们如果把一些属性及方法封装起来,日后使用将非常方便,也可以避免繁琐重复的工作.接下 ...
- 从接口、抽象类到工厂模式再到JVM来总结一些问题
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习! 涉及到的知识点总结如下: 为什么使用接口? 接口和抽象类的区别 简单工厂模式总结 Java中new和newInstance的区别 J ...
- .NET设计模式: 工厂模式
.NET设计模式: 工厂模式(转) 转自:http://www.cnblogs.com/bit-sand/archive/2008/01/25/1053207.html .NET设计模式(1): ...
- Java中的GOF23(23中设计模式)--------- 工厂模式(Factory)
Java中的GOF23(23中设计模式)--------- 工厂模式(Factory) 在给大家介绍工厂模式之前,我想和大家聊聊面向对象的那点事,在这里,引入三个概念. 开闭原则(Open Close ...
- JAVA设计模式(01):创建型-工厂模式【工厂方法模式】(Factory Method)
简单工厂模式尽管简单,但存在一个非常严重的问题.当系统中须要引入新产品时,因为静态工厂方法通过所传入參数的不同来创建不同的产品,这必然要改动工厂类的源码,将违背"开闭原则".怎样实 ...
- 设计模式系列之工厂模式三兄弟(Factory Pattern)
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
- javascript 设计模式-----工厂模式
所谓的工厂模式,顾名思义就是成批量地生产模式.它的核心作用也是和现实中的工厂一样利用重复的代码最大化地产生效益.在javascript中,它常常用来生产许许多多相同的实例对象,在代码上做到最大的利用. ...
- java_设计模式_工厂模式_Factory Pattern(2016-08-04)
工厂模式主要是为创建对象提供了接口.工厂模式按照<Java与模式>中的提法分为三类: (1)简单工厂(Simple Factory)模式,又称静态工厂方法模式(Static Factory ...
随机推荐
- WPF快速入门系列(7)——深入解析WPF模板
一.引言 模板从字面意思理解是“具有一定规格的样板".在现实生活中,砖块都是方方正正的,那是因为制作砖块的模板是方方正正的,如果我们使模板为圆形的话,则制作出来的砖块就是圆形的,此时我们并不 ...
- JavaScript思维导图—数据类型
JavaScript思维导图-来自@王子墨http://julying.com/blog/the-features-of-javascript-language-summary-maps/
- python 对象
python 对象 在python中,对象就是为C中的结构体在堆上申请的一块内存,一般来说,对象是不能被静态初始化的,并且不能再栈空间上生存.本文主要对Python的基本数据类型做简单的介绍. PyO ...
- JQuery checkbox check/uncheck
想通过JQuery来check或者uncheck页面上的checkbox控件,我们可能会想到用下面的代码: $('#chk-all').on('click', function(){ var chec ...
- mysql C API的使用
<MySQL++简介>介绍了如何使用C++来访问mysql,本文记录下使用C API访问mysql,mysql++就是对本文介绍的C-API的封装. 常用函数(名字就能告诉我们用法): M ...
- 我的ef连接mysql之旅
摘要: install-package ef6,mysql.data:增加provider invariantName="MySql.Data.MySqlClient" typ ...
- Oracle+Jsp分页
分页原理: 从jsp页面传到servlet请求中,可以获得当前点击的页数,第一次进入为首页,通过在servlet中获得的当前页数,并且设计一次性显示的内容数,就是几条信息, 并且从dao层查询到数据库 ...
- struts2学习笔记之十三:自定义过滤器
Struts2的拦截器 1.Struts2的拦截器只能拦截Action,拦截器是AOP的一种思路,可以使我们的系统架构 更松散(耦合度低),可以插拔,容易互换,代码不改变的情况下很容易满足客户需求 其 ...
- c#设计模式-观察者模式
Observer 与 Subject 互为耦合,但是这种耦合的双方都依赖于抽象,而不依赖于具体. 一.观察者模式 目的 我们都知道解决一个问题有N种解决方式,但在面向对象的设计中如何能做到“高内聚,低 ...
- sql 循环处理表数据中当前行和上一行中某值相+/-
曾经,sql中循环处理当前行数据和上一行数据浪费了我不少时间,学会后才发现如此容易,其实学问就是如此,难者不会,会者不难. 以下事例,使用游标循环表#temptable中数据,然后让当前行和上一行中的 ...