感觉上个周四距离现在好久远,为什么要说上周四?因为上周四 在下被光荣地临危、不、临时授权、担当了一次活动滴策划者,虽然活动办得差强人意,haha~~just kidding 活动还是很happy的,当然我说的是前面的游戏环节,我们玩了“谁是卧底?”、“我说你猜”等经典的游戏,到底有多经典呐?金田说他“这周都玩了两次这个游戏了”,喜爱之情溢于言表啊
言归正传,后来 我们开始了重头戏——设计模式 工厂三姐妹,因为十三期的师弟没有接触过这些知识二来因为自己学艺不精,所以当时讲得有些吃力,这就尴尬了、是吧;为了挽回一点颜面,当下决定回去写一篇博客,但是(经常说“但是”不好)不过因为因为一直奋战在ITOO、这个总结没有及时地动手去做,不过现在有时间了、so here we go~~
lass LeiFeng //雷锋类{
public void Sweep(){
Console.WriteLine("扫地");
}
public void Wash(){
Console.WriteLine("洗衣");
}
public void BuyRice(){
Console.WriteLine("买米");
}
}
//大学生:继承雷锋类 具有了父类雷锋的属性和方法
class Undergraduate:LeiFeng{}
//志愿者:继承雷锋类
class Volunteer:LeiFeng{}
//雷锋工厂 把工厂类抽象出一个接口
//有唯一的方法:创建抽象产品的工厂方法
interface IFactory{
LeiFeng CreateLeiFeng();
}
//大学生:实现工厂接口 生产具体产品
class UndergraduateFactory:IFactory{
//CreateLeiFeng 上方接口的方法
public LeiFeng CreateLeiFeng(){
return new Undergraduate();
}
}
//志愿者:实现雷锋工厂接口
class VolunteerFactory:IFactory{
public LeiFeng CreateLeiFeng(){
return new Volunteer();
}
}
//客户端调用 大学生学雷锋服务人民
//强制多态,强制类型转换 向上类型的转换
IFactory factory =new UndergraduateFactory();
leiFeng student=factory.CreateLeiFeng();
student.BuyRice();
student.Sweep();
student.Wash();</span>
写了一些注释,大家这么clever代码应该很容易理解;比较新的知识点是:强制多态,强制多态的原则:将值集较小(占用存储空间较小)的类型变换成值集包含了前者(占用存储空间大)的类型,反之可能发生对值得损伤;由这个引出类向上转型、向下转型:
向上转型:就是咱们这里的
IFactory factory =new UndergraduateFactory();</span></span>
解释这个知识的时候网络上习惯于用“动物和狗”这个例子;这里再用多没有创意,今天拿“动物和猫”做例子!父类为动物,子类为猫,父类有一个跑()的方法,猫继承并覆盖了一个跑的方法,在子类重写()该方法:
animal a =new cat();//向上转型
a.run();//调用猫的方法</span>
这是对 动物 方法的扩充,即 动物 的对象可访问 狗 从 动物 中继承来的和 狗 复写动物的方法;这个例子中有运行效果C#——向上转型
再举一下软工视频里面的例子:
这是讲的是“装饰模式”,装饰模式也是比较重要的一个设计模式,当然咱们这里是不讲的,只是借用一些例子来帮助大家理解;product是一个接口,Ice、Chocolate还有Milk等类实现product接口,除了product中生产咖啡他们还有各自添加佐料的方法,还是符合强制多态原则的;
当父类引用指向子类对象时,如果是调用非静态方法,此方法就按子类的运行。如果调用的是成员变量,此变量就是父类的值。向下转型时不是肯定能成功的。打个比方,所有的狗一定是动物,但是动物不一定都是猫,你得先在代码中判断一下。
莫名这个knowledge涉及到了静态方法和非静态方法;这个下篇写吧、博客容量大了make people tired easily
thanks for your time