谁能解释解释多态和简单工厂

dakk_li 2009-10-27 12:13:08
谁能解释解释多态和简单工厂,虽然课上老师讲了,但是很多东西还是不理解...抽象类的应用,还有简单工厂的应用...
...全文
117 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyq11 2009-10-27
  • 打赏
  • 举报
回复
简单工厂 也叫静态工厂:涉及到工厂角色,抽象产品,以及具体产品角色等。
一般情况下就是根据参数数据返回一个适当的子类,然后用基类或接口引用具体的对象,而不用考虑该实际对象的产生过程.多态实现
http://topic.csdn.net/u/20091017/21/95c1915d-2903-4eb0-903a-9b705efbf246.html?81529
zcl24 2009-10-27
  • 打赏
  • 举报
回复
面向对象三大特性概述[封装、继承、多态]

封装:每个对象都包括自己进行操作所需要的所有信息,而不依赖于其他对象来完成自己的操作。这样的方法和属性通过类的实例来实现。

好处:良好的封装可以降低耦合度;类的内部可以自由修改;类具有对外的清晰接口。

继承:IS-A的关系。A is-a B:A是B,A可以继承B。A是B的一个特例,特殊化,A又可以具备自己独有的个性。三个点:

1.子类拥有父类非private的属性和功能(父类的构造函数例外,可以用base关键字访问,base代表着父类);

2.子类具有自己的属性和功能,即子类可以扩展父类没有的属性和功能;

3.子类可以以自己的方式重写父类的功能。

缺点:父类变,子类不得不变,父子是一种强耦合的关系。

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

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

2.子类在运行时以自己的方式实现;

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

为了使子类的实例完全接替来自父类的类成员,父类必须将该成员声明为虚拟的(virtual),子类可以选择使用override将父类的实现替换为自己的实现,这就是多态。

原理:当方法被调用时,无论是否转换为其父类,都只有位于对象继承链最末端的方法实现会被调用。即,虚方法是按照运行时类型而非编译时类型进行动态绑定调用的。
SimpleM 2009-10-27
  • 打赏
  • 举报
回复

public class CarS
{
public virtual void Say()
{
Console.WriteLine("");
}
}

public class car : CarS
{
public override void Say()
{
Console.WriteLine("I am a Car");
}
}

public class BigCar : CarS
{
public override void Say()
{
Console.WriteLine("I am a BigCar");
}
}

public class SimpleFactory
{
public static CarS Choose(string type)
{
CarS ss = null;
switch (type)
{
case "小汽车":
ss = new car();
break;
case "大汽车":
ss = new BigCar();
break;
}
return ss;
}
}


class Program
{
static void Main(string[] args)
{
Console.WriteLine("Programm Started:");
Console.WriteLine("---------------------------------------");
Console.WriteLine("");

string strClass = "小汽车";
CarS myCar = SimpleFactory.Choose(strClass);
myCar.Say();


Console.WriteLine("");
Console.WriteLine("---------------------------------------");
}
}
dakk_li 2009-10-27
  • 打赏
  • 举报
回复
还是不太理解...可以举一个例子吗?
谢谢啦
SimpleM 2009-10-27
  • 打赏
  • 举报
回复
比如现在有个(车)父类,然后有小汽车、卡车、赛车,这三个类继承了这个父类
然后使用简单工厂的模式根据你输入的值,进行判断到底这个父类要NEW哪一个子类,最后由父类带出
就这么简单

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧