zoukankan      html  css  js  c++  java
  • C# 面向接口编程

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

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

    下面是一个简单的范例:

     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 飞行速度非常快
  • 相关阅读:
    centos7最小化安装无法tab补全
    rhcsa备战笔记
    idea springboot应用启动
    idea 导入Mapper错误报错设置
    idea 忽略显示文件
    maven 插件jetty/tomcat启动 web 应用
    maven jstl、jsp、servlet依赖
    maven 项目目录图与web 应用结构图对比
    maven 远程仓库、私服及镜像配置
    maven windows环境nexus3.0私服搭建
  • 原文地址:https://www.cnblogs.com/yzz071277/p/9270895.html
Copyright © 2011-2022 走看看