接口(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打印机

C# 接口的使用(工厂模式)的更多相关文章

  1. 设计模式--工厂模式Factory(创建型)

    工厂模式属于创建型模式,分为三类,简单工厂模式.工厂方法模式.抽象工厂模式. 一.简单工厂模式 在工厂中做判断,根据产品类型从而创造相应的产品,当增加新产品时需要修改工厂类. 例如: enum CTY ...

  2. 设计模式(3)--抽象工厂模式(Absrtact Factory Pattern)

    定义 抽象工厂模式的实质就是提供接口来创建一系列相关或独立的对象而不指定这些对象的具体类. 理解 在软件系统中,经常面临着"一系列相互依赖的对象"的创建工作:同时由于需求的变化,往 ...

  3. C++设计模式——简单工厂模式

    简单工厂模式(Simple Factory Pattern) 介绍:简单工厂模式不能说是一个设计模式,说它是一种编程习惯可能更恰当些.因为它至少不是Gof23种设计模式之一.但它在实际的编程中经常被用 ...

  4. .NET设计模式: 工厂模式

    .NET设计模式: 工厂模式(转) 转自:http://www.cnblogs.com/bit-sand/archive/2008/01/25/1053207.html   .NET设计模式(1): ...

  5. 简单工厂模式 Simple Factory

    简单工厂模式的作用就是定义一个用于创建对象的接口 在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化.         先来看看它的组成: 1) 工厂类角色 ...

  6. 转--简单工厂模式 Simple Factory

    简单工厂模式的作用就是定义一个用于创建对象的接口 在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化.         先来看看它的组成: 1) 工厂类角色 ...

  7. 抽象工厂模式[wiki]

        抽象工厂[编辑] 维基百科,自由的百科全书   跳转至: 导航. 搜索   以统一塑模语言中的类型图来表示抽象工厂 抽象工厂模式(英语:Abstract factory pattern)是一种 ...

  8. java设计模式---三种工厂模式之间的区别

    简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式.其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性. 本文是本人对这三种模式学习后的一个小结以及对他 ...

  9. 抽象工厂模式--java代码实现

    抽象工厂模式 抽象工厂模式,对方法工厂模式进行抽象.世界各地都有自己的水果园,我们将这些水果园抽象为一个水果园接口,在中国.英国和美国都有水果园,种植不同的水果,比如苹果.香蕉和梨等.这里将苹果进行抽 ...

随机推荐

  1. C#System.Text.RegularExpressions.Regex使用(二) .

    (6)特殊字符的匹配 string x = "//"; Regex r1 = new Regex("^////$"); Console.WriteLine(&q ...

  2. JS——函数

    一.函数的种类 1.无参函数 function showName() { alert("我是无参函数"); } 2.有参函数 在函数中的参数为"形式参数" 形式 ...

  3. 小隐隐于野:基于TCP反射DDoS攻击分析

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯DDoS安全专家.腾讯云游戏安全专家 陈国 0x00 引言 近期,腾讯云防护了一次针对云上某游戏业务的混合DDoS攻击.攻击持续了 ...

  4. CF#483(div2 C)

    http://codeforces.com/contest/984/problem/C C. Finite or not time limit per test 1 second memory lim ...

  5. 一种轻量级的微信小程序日志监控的方法

    今天一个活动要写个H5,明天一个功能要用小程序,天天都在写bug.用户反馈小程序用起来有问题还特么还不知道到底出了啥bug,反馈多了,老板要扣工资了!看来挖了太多坑不填也不行,程序异常还是要主动追踪, ...

  6. Python高级教程

    关键字is 和 == 的区别 a = 'hello world' b = 'hello world' a == b #返回True a is b #返回False 注意:is 判断是否是一个ID, = ...

  7. xml序列化和反序列化(一)

    最近项目中需要调用第三方webservice,入参和出参采用xml格式,大致如下: 入参: <?xml version="1.0" encoding="utf-8& ...

  8. DOS系统常用命令

    前言: DOS命令是DOS操作系统使用的命令.DOS操作系统是一种磁盘操作系统,从Windows95.98到今天的Windows10都内置有DOS操作系统.可以通过"win+R", ...

  9. TestNG进行接口测试,脚本及可维护性框架

    注: 以下内容引自http://blog.csdn.net/u010321474/article/details/49977969 TestNG进行接口测试,脚本及可维护性框架 原创 2015年11月 ...

  10. PLINQ的 ForAll 对比集合的ForEach

    在 PLINQ 中,还可以使用 foreach 执行查询以及循环访问结果. 但是,foreach 本身不会并行运行,因此,它要求将所有并行任务的输出合并回该循环正在上面运行的线程中. 在 PLINQ ...