C# 面向接口编程

Wesley13
• 阅读 282

面向接口编程就是将对象中的某个功能提取出来作为接口,而功能的具体实现则交由继承自这个接口的实现类处理。

面向接口的好处是降低程序的耦合性,当有新的功能时只需要对新功能进行编写,不需要修改已有的代码

下面是一个简单的范例:

 1     //父类
 2     public class Duck
 3     {
 4         protected IFlyBehaviour flyBehaviour;
 5         //可以动态修改对象的某一功能的实现
 6         public void SetDuckFly(IFlyBehaviour fb)
 7         {
 8             flyBehaviour = fb;
 9         }
10         public void DuckFly()
11         {
12             flyBehaviour.Fly();
13         }
14     }
15 
16     //小鸭子类,继承鸭子类
17     public class LittleDuck : Duck
18     {
19         public LittleDuck()
20         {
21             flyBehaviour = new SlowFly();
22         }
23     }
24 
25     //大鸭子类,继承鸭子类
26     public class BigDuck : Duck
27     {
28         public BigDuck()
29         {
30             flyBehaviour = new QuickFly();
31         }
32     }
33 
34     //飞行为的接口,只定义了飞行的方法而未实现
35     public interface IFlyBehaviour
36     {
37         void Fly();
38     }
39 
40     //实现快速飞的行为类,继承了飞行接口
41     public class QuickFly : IFlyBehaviour
42     {
43         public void Fly()
44         {
45             Console.WriteLine("飞行速度非常快");
46         }
47     }
48 
49     //实现慢速飞行的行为类,继承了飞行接口
50     public class SlowFly : IFlyBehaviour
51     {
52         public void Fly()
53         {
54             Console.WriteLine("飞行速度非常慢");
55         }
56     }

假设作为父类的鸭子类Duck具有飞行的功能,继承自它的两个子类大鸭子BigDuck飞得快,小鸭子LittleDuck飞的慢,通过面向接口的方式进行实现,而通过父类Duck中的SetDuckFly()方法,我们还可以在程序运行过程中动态的去修改某一功能

执行:

1 BigDuck bigDuck = new BigDuck();
2 bigDuck.DuckFly();
3 
4 LittleDuck littleDuck = new LittleDuck();
5 littleDuck.DuckFly();
6 
7 littleDuck.SetDuckFly(new QuickFly());
8 littleDuck.DuckFly();

结果:

1 飞行速度非常快
2 飞行速度非常慢
3 飞行速度非常快
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java中多态的实现机制
多态的概念:  简单来说就是事物在运行过程中存在的不同状态,即父类或接口定义的引用变量指向子类或具体实现类的实例对象。程序调用方法在运行期才进行动态绑定,而不是引用变量的类型中定义的方法。多态存在的前提:1、存在继承关系,子类继承父类;2、子类重写父类的方法;3、父类引用指向子类对象。具体实例:1、定义一个父类:Animal
Wesley13 Wesley13
2年前
java 07 接口
1.interface    接口2.接口中的成员修饰符固定  publicstaticfianl  //成员变量  只通过类访问   publicabstract    //成员函数   3.接口里所有的方法都是抽象的,抽象类中,可以没有抽象方法。  类与类继承,类与接口是实现的关系。降低耦合(高
Wesley13 Wesley13
2年前
PHP开发APP接口1——APP接口简介
第1章APP接口简介1、APP接口介绍lPHP面向对象中的接口:就是用interface定义的抽象类如:<?php    interface video {        public function getVideos();        publ
Stella981 Stella981
2年前
Spring AOP 两种代理 Cglib、JDK
概念AOP:AOP是OOP(面向对象编程)的一种延续,OOP中继承的思想主要是提高代码的重用率,但是继承不能同个类在多个方法的相同位置出现的相同代码的问题JDK动态代理:AOP的一种实现,仅支持实现了接口的类。性能较好Cglib:AOP的一种实现,支持实现了接口的类和没有实现接口的类。对比JDK动态代理性能较差SpringAOP:结
Wesley13 Wesley13
2年前
Java设计模式(一)
Structuralpatterns结构型模式1.适配器模式(Adaptor)目的:将某个类/接口转换为client期望的其他形式。适配器让类可以协同工作,否则就会因为不兼容的接口而无法工作。通过增加一个接口,将已存在的子类封装起来,client面向接口编程,从而隐藏了具体子类。假设我们有一个MediaPlayer接口和一个实现了
Easter79 Easter79
2年前
SpringBoot开发案例之整合Dubbo提供者(二)
!00.jpg(https://blog.52itstyle.com/usr/uploads/2017/07/1329278006.jpg)大家有没有注意到,上一篇中提供者,暴露接口的方式?混搭。springboot本身接口实现使用了注解的方式,而Dubbo暴露接口使用的是配置文件的实现方式,即如下:代码importorg.s
Wesley13 Wesley13
2年前
Go接口
Go接口的定义Go语言不是一种 _“传统”_ 的面向对象编程语言:它里面没有类和继承的概念。但是Go语言里有非常灵活的 接口(Interfacesarenamedcollectionsofmethodsignatures) 概念,通过它可以实现很多面向对象的特性。接口提供了一种方式来 说明 对象的
Wesley13 Wesley13
2年前
Java oop第05章_多态、接口
一、为什么需要接口?  Java中当一个类继承父类时,最多也只能继承一个父类,扩展性会受到一定的限制,为了弥补这一缺陷,Java又提供了一种新的引用数据类型分类,叫接口。一个类只能继承一个父类,但可以实现多个接口。二、接口的定义和使用:  1.定义接口:使用interface关键