zoukankan      html  css  js  c++  java
  • 什么是接口(入门篇)

    上学的时候,学校的老师,总会用一些简单的例子来解释什么是接口(interface)

    这些例子可能像是这样

    /// <summary>
    /// 一个表示动物的接口
    /// </summary>
    public interface IAnimal
    {
        /// <summary>
        /// 所有的动物都要吃东西
        /// </summary>
        void Eat();
    }

    然后再随便上一个小动物,比如像这样的

    public class Cat : IAnimal
    {
        public void Eat()
        {
            Console.WriteLine("我是小猫,我要吃鱼")
        }
    }

    然后对接口的解释也基本上就结束了,随着一些作业和考试,我们只知道,接口是这么一个没有实现任何方法,只定义了方法内容的东西。

    具体有什么用呢?也许只是觉得当有一些对象能够形成像动物这样的树形图的时候,我们才会在树根的位置放置一个接口。

    然后

    接口的作用并不体显在什么小动物、载具、或是人这种对象树上

    先说一种最简单的接口设计情形:功能向接口

    我们的程序里涉及到很多对象,但这些对象都有一个共同的功能——销售,拥有一个价格,是否参加折扣活动,以及折后价格

    那么,我们可以针对这项“功能”设计一个接口

    /// <summary>
    /// 表示一个可以用于销售的功能接口
    /// </summary>
    public interface ISaleable
    {
        /// <summary>
        /// 价格
        /// </summary>
        int Price { get; }
    
        /// <summary>
        /// 是否可以参加折扣
        /// </summary>
        bool CanDiscount { get; }
    
        /// <summary>
        /// 折后价格
        /// </summary>
        int DiscountedPrice {get;}
    }

    有了这么一个接口以后,我们就可以做使用这个“接口”的方法了

    比如我们做一个销售员的对象,除去那些姓名、员工号一类的属性不谈,至少它应当拥有一个方法,叫Sell,我们来看代码

    public class Seller
    {
        void Sell(ISaleable good)
        {
            if (good.CanDiscount)
            {
                Console.Write("您好,你所购买的产品可以参加折扣。折扣的价格是{0}", good.DiscountedPrice);
            }
            else
            { 
                Console.WriteLine("您好,你所购买的产品没有参加任何折扣,只能按照原价{0}进行购买",good.Price)
            }
        }
    }

    于是,我们有了一个功能接口,可以使用了该功能的类型,那么,现在让我们像上大学那样,随便建几个类型吧

    public class Car : ISaleable
    {
    
        public int Price
        {
            get { return 100000; }
        }
    
        public bool CanDiscount
        {
            get { return false; }
        }
    
        /// <summary>
        /// 由于该类型不可以有折扣,所以折后价格是可以不实现的
        /// </summary>
        public int DiscountedPrice
        {
            get { throw new NotImplementedException(); }
        }
    }
    
    public class Compute : ISaleable
    {
    
        public int Price
        {
            get { return 5000; }
        }
    
        public bool CanDiscount
        {
            get { return true; }
        }
    
        public int DiscountedPrice
        {
            get { return 5000 * 0.8; }
        }
    }

    这样,销售员就可以卖这两样商品了

    在下一篇 《什么是接口(入门篇)——使你的程序功能丰富》 您还可以学习到接口更多的用法

  • 相关阅读:
    Oracle 备份与恢复 15 个典型问题
    Oracle Rman 增量备份与差异备份
    Oracle top 查询TOP SQL
    Oracle 将另外一张表的列更新到本表的列
    Mysql Innodb 表碎片整理
    python Django 之 Model ORM inspectdb(数据库表反向生成)
    MySQL 5.6比较重要的参数,以及5.5到5.6默认值有过变化的参数
    Python Django 前后端数据交互 之 HttpRequest、HttpResponse、render、redirect
    HTML(一)基础
    Python Django 前后端数据交互 之 HTTP协议下GET与POST的区别
  • 原文地址:https://www.cnblogs.com/ShimizuShiori/p/4910720.html
Copyright © 2011-2022 走看看