zoukankan      html  css  js  c++  java
  • C# 接口的使用(工厂模式)

    接口(interface)与抽象类(abstract)的区别:

    相同点:

    1.都不能被直接实例化,都可以通过继承实现其抽象方法。

    2.都是面向抽象编程的技术基础,实现诸多模式

    不同点:

    1.接口可以多继承,抽象类不能实现多继承。

    2.接口只能定义抽象规则,抽象类既能定义抽象规则也能提供已实现的成员

    3.接口是一组行为规范,抽象类是一个不完全的类,着重于族的概念

    4接口支持回调,抽象类不能实现回调,因为继承不支持。

    5接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法,抽象类可以定义属性、字段、包含有实现的方法

    6.接口可以作用于值类型和引用类型,抽象类只能作用于引用类型(例如:Struct只能继承接口)

    7.抽象类应主要用于关系密切的对象,而接口则是适合为不相关的类提供通用功能

    8.接口着重于Can—Do关系类型,抽象类则偏重于IS—A式关系。

    9.接口多定义对象的行为,抽象类多定义对象的属性。

    10.如果要设计小而简练的功能块,则使用接口,如果要设计大的功能单元,则使用抽象类

    11.接口对应是面向对象编程思想的重要原则:面向接口编程,

    12.抽象类对应则是设计模式的的精髓:面相抽象编程

    接口与工厂模式简单Demo:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace Test
    {
    class Program
    {
    static void Main(string[] args)
    {

    PrintFactory myFactory = new PrintFactory();

    //这里调用的B打印机
    Iprint myPrint = myFactory.CreatePrintB();

    //参数随便写,返回指定打印机方法(A打印机、B打印机)中的输出。
    Console.WriteLine(myPrint.PrintData("今天的太阳好棒"));

    }
    /// <summary>
    /// 打印机接口
    /// </summary>
    interface Iprint
    {
    string PrintData(string data);
    }
    /// <summary>
    /// A打印机 实现接口
    /// </summary>
    class PrintA : Iprint
    {
    public string PrintData(string data)
    {
    //可以进行业务处理 这里返回一句话方便识别
    return "这是A打印机";
    }
    }
    /// <summary>
    /// B打印机 实现接口
    /// </summary>
    class PrintB : Iprint
    {
    public string PrintData(string data)
    {
    //可以进行业务处理 这里返回一句话方便识别
    return "这是B打印机";
    }
    }
    /// <summary>
    /// 工厂类
    /// </summary>
    class PrintFactory
    {
    /// <summary>
    /// 创建A打印机
    /// </summary>
    /// <returns></returns>
    public Iprint CreatePrintA()
    {
    //返回A打印机
    return new PrintA();
    }
    /// <summary>
    /// 创建B打印机
    /// </summary>
    /// <returns></returns>
    public Iprint CreatePrintB()
    {
    //返回B打印机
    return new PrintB();
    }
    }
    }
    }

    执行效果:

    这里调用的B打印机

  • 相关阅读:
    猜年龄的问题
    某字符串可能包含26个英文字母,可能包含6种符号,可能包含3个数字,统计他们出现的个数
    指针变量前面类型的作用和意义
    二维数组 同时计算 练习题
    二维数组,行累加与列累加同时进行
    二维数组斜线扫描心得与分析
    二维数组扫描操作题
    LeetCode | Remove Duplicates from Sorted List II
    LeetCode | Remove Nth Node From End of List
    LeetCode | Palindrome Linked List
  • 原文地址:https://www.cnblogs.com/kunyun/p/10685481.html
Copyright © 2011-2022 走看看