欢迎来到天天文库
浏览记录
ID:40313362
大小:215.00 KB
页数:9页
时间:2019-07-30
《设计模式之—简单工厂设计模式》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、设计模式之—简单工厂设计模式今天分享设计模式中最简单的一种模式简单工厂模式。先从面向对象说起,面向对象有三大特性:继承,封装,多态。所谓封装:在面向对象语言中,我们都是以类来组织代码,类中定义了属性和方法,我们在调用的时候只需要去使用对象的方法名或者属性名就可以了,而不必甚至不需要知道方法的具体实现,类比生活中的例子,榨汁机。我们只知道用它可以榨果汁,放个苹果给我们一杯苹果汁,放个桔子给我们一杯桔子汁就可以了。我们不必要去关心榨汁机是怎么去工作的。所谓继承:就是子类继承了父类,父类所有的非私有的方法和属性,子类都可以拿来直接使用。就
2、好比生活中,父亲给儿子留了一笔遗产。你可以直接使用这笔钱而不需要去创造这笔钱然后在去使用。所谓多态:一个类可以有多个子类,而每个子类只能由一个父类,就好比。一个父亲可以有多个儿子,而每个儿子只可以有一个父亲。对于多态我们有2种理解。第一种是不同的人对同一件事所做的不同反应,例如工作,对于农民来说就是种地,科学家搞科研,工人上班,学生做作业。第二种是同一个人在不同情况下,具有不同的身份和角色,例如同样是你,在公司你可能是员工,在家里你是你父母的儿子,在路上你是行人。先来看一个简单的例子:我们首先定义一个父类Person类:///3、mmary>///定义父类Person///publicclassPerson{publicstringName{get;set;}publicintAge{get;set;}//////自我介绍///publicvoidSayHi(){Console.WriteLine("大家好我是"+Name+",我今年"+Age+"岁了!");}}定义2个子类,一个Student类,一个Teacher类publicclassStudent:Person{}publicclassTeac4、her:Person{}在控制台中访问:staticvoidMain(string[]args){Students=newStudent();s.Name="张三";s.Age=20;s.SayHi();}输出:可以看出子类是可以使用父类的非私有的属性和方法。当然老师的自我介绍和学生自我介绍肯定不一样。如果我们要实现老师的自我介绍是大家好。我是XX老师,我今年工作几年了。学生的自我介绍是大家好。我是某某学生,我今年多少岁了,应该怎么做呢。如下图:编译器会有警告,因为我们在基类中已经使用了SayHi方法来做自我介绍。为了能更好的解决问5、题。我们就要用到多态了。我们把基类Person类改写成抽象类,把基类中的SayHi方法改写成抽象方法。直接上图:///定义父类Person///publicabstractclassPerson{publicstringName{get;set;}publicintAge{get;set;}//////自我介绍/////publicvoidSayHi()//{//Console.WriteLine("大家好我是"+Name+",我今年"+Age+"岁了!");//}///6、ummary>///抽象方法,自我介绍///抽象方法没有具体实现,只能通过子类覆写来实现。///publicabstractvoidSayHi();}子类publicclassTeacher:Person{publicintYearOfWork{get;set;}publicoverridevoidSayHi(){Console.WriteLine("大家好我是"+Name+"老师,我工作"+YearOfWork+"年了!");}}publicclassStudent:Person{//////7、重写基类自我介绍方法///publicoverridevoidSayHi(){Console.WriteLine("大家好我是"+Name+",我今年"+Age+"岁了!");}}在Main方法中定义如下staticvoidMain(string[]args){Teachert=newTeacher();t.Name="AAA";t.YearOfWork=5;t.SayHi();Personp=newTeacher(){Age=18,Name="李四",YearOfWork=5};p.SayHi();}输出结果如8、上图我们可以看到p和t都是调用的teacher类中的sayhi方法。这就是多态。子类通过覆写父类中的抽象方法或者虚方法来实现。这个也叫里氏替换原则就是凡是父类出现的地方子类都可以出现。试想一下如果Person类不定义为抽象类。以上2个
3、mmary>///定义父类Person///publicclassPerson{publicstringName{get;set;}publicintAge{get;set;}//////自我介绍///publicvoidSayHi(){Console.WriteLine("大家好我是"+Name+",我今年"+Age+"岁了!");}}定义2个子类,一个Student类,一个Teacher类publicclassStudent:Person{}publicclassTeac
4、her:Person{}在控制台中访问:staticvoidMain(string[]args){Students=newStudent();s.Name="张三";s.Age=20;s.SayHi();}输出:可以看出子类是可以使用父类的非私有的属性和方法。当然老师的自我介绍和学生自我介绍肯定不一样。如果我们要实现老师的自我介绍是大家好。我是XX老师,我今年工作几年了。学生的自我介绍是大家好。我是某某学生,我今年多少岁了,应该怎么做呢。如下图:编译器会有警告,因为我们在基类中已经使用了SayHi方法来做自我介绍。为了能更好的解决问
5、题。我们就要用到多态了。我们把基类Person类改写成抽象类,把基类中的SayHi方法改写成抽象方法。直接上图:///定义父类Person///publicabstractclassPerson{publicstringName{get;set;}publicintAge{get;set;}//////自我介绍/////publicvoidSayHi()//{//Console.WriteLine("大家好我是"+Name+",我今年"+Age+"岁了!");//}///
6、ummary>///抽象方法,自我介绍///抽象方法没有具体实现,只能通过子类覆写来实现。///publicabstractvoidSayHi();}子类publicclassTeacher:Person{publicintYearOfWork{get;set;}publicoverridevoidSayHi(){Console.WriteLine("大家好我是"+Name+"老师,我工作"+YearOfWork+"年了!");}}publicclassStudent:Person{//////
7、重写基类自我介绍方法///publicoverridevoidSayHi(){Console.WriteLine("大家好我是"+Name+",我今年"+Age+"岁了!");}}在Main方法中定义如下staticvoidMain(string[]args){Teachert=newTeacher();t.Name="AAA";t.YearOfWork=5;t.SayHi();Personp=newTeacher(){Age=18,Name="李四",YearOfWork=5};p.SayHi();}输出结果如
8、上图我们可以看到p和t都是调用的teacher类中的sayhi方法。这就是多态。子类通过覆写父类中的抽象方法或者虚方法来实现。这个也叫里氏替换原则就是凡是父类出现的地方子类都可以出现。试想一下如果Person类不定义为抽象类。以上2个
此文档下载收益归作者所有