面试遇到的问题总结
时间 : 2022/5/26
面试岗位 : WPF上位机工程师
问题1.工厂模式和简单工厂模式的区别
答:简单工厂模式是类的创建模式,又叫做静态工厂方法模式.就是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例
工厂类:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体的类实现。
抽象产品角色:担任这个角色的类是由工厂方法模式所创建的对象的父类,或她们共同拥有的接口。一般由接口或抽象类实现。
具体产品角色:工厂方法模式所创建的任何对象都是这个角色的实例,由具体类实现。
工厂模式是定义一个创建产品对象的工厂接口,让子类决定实例化哪一个类,将实际创建工作推迟到子类当中。工厂方法模型中,“工厂”创建的是还没有分化好的对象,其中没有逻辑判断相比于简单工厂模式,基类工厂去实现接口,子工厂去实现判断并能生产出相应功能的对象。
区别:
简单工厂 : 用来生产同一等级结构中的任意产品。(不支持拓展增加产品)
工厂方法 :用来生产同一等级结构中的固定产品。(支持拓展增加产品)
抽象工厂 :用来生产不同产品族的全部产品。(不支持拓展增加产品;支持增加产品族)
问题2.抽象方法与虚方法的区别
答:虚方法 关键字virtual
将方法添加关键字之后就是虚方法
public class Animal{
public virtual void Speak(){
// 这是一个虚方法
}
}
虚方法可以被子类重写 关键字override
public class Dog : Animal{
public override void Speak(){
base.Speak();
//重写父类的方法
}
}
特点:虚方法更容易维护,修改或者维护时,可以不改动底层源码,直接修改它的重写方法
应用场景:鸡鸭狗猫,都会叫,就可以先定义一个虚方法为叫 然后在鸡鸭狗猫里面重写,更高效快捷的实现功能
抽象方法 关键字 abstract
///抽象类
public abstract class AbsParent
{
///抽象方法
public abstract void AbsTest();
}
继承抽象类和抽象方法
public class AbsChild: AbsParent
{
public override void AbsTest()
{
//实现抽象类
//无法使用base.AbsTest()
}
}
继承抽象方法不能使用base.AbsTest,因为它没有方法实体
public class AbsGroundSun : AbsChild
{
public override void AbsTest()
{
base.AbsTest();
}
}
特点:抽象方法必须放在抽象类中
抽象类被实现的时候必须实现里面的全部抽象方法
区别:抽象方法只有一个规范没有实体,虚方法有自己的方法主体,子类可以继承他之后还可以调用他的方法
`
特点:抽象方法必须放在抽象类中
抽象类被实现的时候必须实现里面的全部抽象方法
区别:抽象方法只有一个规范没有实体,虚方法有自己的方法主体,子类可以继承他之后还可以调用他的方法