面向接口编程


原文链接icon-default.png?t=M4ADhttps://www.cnblogs.com/slyfox/p/6838127.html

1.面向接口编程是面想对象编程的一部分,附属于面向对象编程。
2.接口是没有方法主体代码的集合,可以被继承并实现。
3.接口是一组规则的集合,它规定了实现本接口的类或者接口必须拥有的能力或者规则,可以理解为如果你是XXX你必须能XXX的概念。
4.接口是在一定粒度视图上的同类事物的抽象表示。
5.接口可以在系统分层中,分清层次和依赖关系,直接依赖接口而不是具体的对象,实现解耦。
6.抽象类和接口,抽象类和子类之间应该是一般和特殊的关系,而接口仅仅是子类应该遵守的一组规则。

using System.Buffers;
using System.Security.AccessControl;
// See https://aka.ms/new-console-template for more information
using System;

//.net6 写法,不要main函数
Run();

static void Run()
{
    Console.WriteLine("-------------");

    FlashDisk flashDisk = new FlashDisk();
    Mp3Player mp3Player = new Mp3Player();
    MobileHardDisk mobileHardDisk = new MobileHardDisk();

    Computer computer1 = new Computer(flashDisk);
    computer1.WriteData();
    computer1.ReadData();
    System.Console.WriteLine("--------------");
    Computer computer2 = new Computer();
    computer2.UsbDrive = mp3Player;
    computer2.ReadData();
    computer2.WriteData();
    mp3Player.PlayMusic();//子类拥有自己的方法
    System.Console.WriteLine("------------------");
    Computer computer3 = new Computer(mobileHardDisk);
    computer3.ReadData();
    computer3.WriteData();
    System.Console.WriteLine("------------------");
    Computer computer4 = new Computer(new NewStorage());
    computer4.ReadData();
    computer4.WriteData();
    System.Console.WriteLine("------------------");
    //包转发器的写法 Adpater
    SuperStorage superStorage = new SuperStorage();
    SuperStorageAdapter superStorageAdapter = new SuperStorageAdapter();
    //包装期包装一层
    superStorageAdapter.SuperStorage = superStorage;
    //调用包装器封装后的对象
    Computer computer5 = new Computer(superStorageAdapter);
    computer5.ReadData();
    computer5.WriteData();
    System.Console.WriteLine("-----------------");
    //包装期更简单的写法,推荐,继承的方式
    SuperStorageAdapterV2 superStorageAdapterV2 = new SuperStorageAdapterV2();
    Computer computer6 = new Computer(superStorageAdapterV2);
    computer6.ReadData();
    computer6.WriteData();
}




#region  接口
//定义读写接口
public interface IMobileStorage
{
    void Read();
    void Write();
}
#endregion

#region  具体的实现类
///移动存储
public class FlashDisk : IMobileStorage
{
    public void Read()
    {
        Console.WriteLine("Reading from FlashDisk...");
        Console.WriteLine("Read finished!");
    }
    public void Write()
    {
        Console.WriteLine("Writeing from FlashDisk...");
        Console.WriteLine("Write finished!");
    }
}
///mp3
public class Mp3Player : IMobileStorage
{
    public void Read()
    {
        Console.WriteLine("Reading from mp3...");
        Console.WriteLine("Read finished!");
    }
    public void Write()
    {
        Console.WriteLine("Writeing from mp3...");
        Console.WriteLine("Write finished!");
    }
    ///子类可以拥有自己的方法
    public void PlayMusic()
    {
        System.Console.WriteLine("Music Is Playing....");
    }
}
//移动硬盘
public class MobileHardDisk : IMobileStorage
{

    public void Read()
    {
        Console.WriteLine("Reading from hardDisk...");
        Console.WriteLine("Read finished!");
    }
    public void Write()
    {
        Console.WriteLine("Writeing from hardDisk...");
        Console.WriteLine("Write finished!");
    }
}

public class NewStorage : IMobileStorage
{
    public void Read()
    {
        System.Console.WriteLine("Read from NewStorage..");
        System.Console.WriteLine("Read is Finished!");
    }
    public void Write()
    {
        System.Console.WriteLine("Write from NewStorage..");
        System.Console.WriteLine("Write is Finished!");
    }
}
//特殊的实现用adapter包装一层
public class SuperStorage
{
    public void Rd()
    {
        System.Console.WriteLine("SuperStorage from Rd");
    }
    public void Wt()
    {
        System.Console.WriteLine("SuperStorage from Wt");
    }
}
//包装器 接口实现方法
public class SuperStorageAdapter : IMobileStorage
{
    private SuperStorage _superStorage;
    public SuperStorage SuperStorage
    {
        get { return _superStorage; }
        set { _superStorage = value; }
    }
    public SuperStorageAdapter()
    {

    }
    public SuperStorageAdapter(SuperStorage superStorage)
    {
        this._superStorage = superStorage;
    }
    public void Read()
    {
        _superStorage.Rd();
    }
    public void Write()
    {
        _superStorage.Wt();
    }
}

//包装器 接口实现方法这个该方法更好,直接继承要被转换的类,调用基类的方法
public class SuperStorageAdapterV2 : SuperStorage, IMobileStorage
{
    public void Read()
    {
        this.Rd();
    }
    public void Write()
    {
        this.Wt();
    }
}

#endregion

#region  调用环境
public class Computer
{

    private IMobileStorage _usbDrive;//一切基于接口

    public IMobileStorage UsbDrive
    {
        get { return _usbDrive; }
        set { _usbDrive = value; }
    }
    public Computer(IMobileStorage usbDrive)
    {
        //根据传进来的对象来决定调用什么方法,实现解耦和灵活调用
        this._usbDrive = usbDrive;
    }
    public Computer()
    {

    }
    public void ReadData()
    {
        _usbDrive.Read();
    }
    public void WriteData()
    {
        _usbDrive.Write();
    }
}

#endregion

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值