C#2.0学习4—面向对象高级概念

C#2.0学习4—面向对象高级概念

一、接口

1.  接口的概念及作用

一个例子:一台电脑上的主板和光驱,其实对主板来说,光驱只要是符合它所要求的规格就可以了,具体是哪种光驱,并不重要,它都能兼容。如果我更换一个光驱,没有必要连主板也换。

当我们需要一个新的对象时,我们首先考虑,能否定义一个和原有对象功能一致的对象(兼容),而不是修改原有对象,或者做一个全新的对象

再如:一个数据库系统中对数据的SIUD操作,我们应该如何设计呢,假设我们的系统是不能确定具体的数据库,或者用户要求变更到新的数据库时,那我们是否要重新设计整个数据访问层及与其相关的调用呢?

我们定义一个接口:

interface IDataAccess

{

public bool insert(Item)

public bool delete(string id)

public bool update(Item)

public List getData();

public Item getDataById(string id);

}

如果我们使用Sqlserver

我们就定义一个类实现上述接口

class SqlDataAcess : IDataAcess

{

//具体的sqlServer的操作

}

而在上层程序调用时我们可以简单的使用如下形式调用

Item item= new Item();

IDataAcess da = new SqlDataAccess(); //此处如果应用反射可从配置文件中直接初始化对象,而不需如此硬编码

//IDataAcess da = DataAccessFactory.createInstance(Configration.getDataType);

Da.insert(item);

 

现在如果要更换成Oracle,大家想应该如何做了

class OracleDataAcess : IDataAcess

{

//具体的OracleServer的操作

}

再把配置文件中的DataType改为Oracle就行了,整个系统不用更改其它代码

如下图:

 

2.  接口的特性

为了应对可变化的需求,应该针对接口编程,而非针对具体类编程

针对完成相同功能的程序,要提供一致的程序接口,方便程序的即插即用

代码的实现是在具体类中,而非接口中,接口只声明程序的功能,并不实现

二、抽象类

与接口类似,但它可以包含属性,也可实现方法

 

三、面向对象设计原则

1.单一职责原则(SRP):

一个类应该仅有一个引起它变化的原因。

2.开放封闭原则(OCP):

类模块应该是可扩展的,但是不可修改(对扩展开放,对更改封闭)

3Liskov 替换原则(LSP:

子类必须能够替换它们的基类

4.依赖倒置原则(DIP):

高层模块不应该依赖于低层模块,二者都应该依赖于抽象。

抽象不应该依赖于实现细节,实现细节应该依赖于抽象。

5.接口隔离原则(ISP):

不应该强迫客户程序依赖于它们不用的方法。

四、设计模式与多态应用

多态的应用很广泛,有很多模式都用到它。如:工厂方法,策略,模板模式等

所谓设计模式:是指前人的一种编程经验。

上面的数据库系统的例子就是应用到工厂方法模式

一个产品接口:IDataAccess             实现一致的数据操作

两个具体实现类:SqlDataAccessOracleDataAccess  分别是具体数据库访问的实现

一个工厂类:DataAccessFactory 作用为针对不同的配置,生成不同的DataAccess

示例演示(演员表演节目项目)

用到的模式:工厂方法

多态的应用

 

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值