接口(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. JavaScirpt的this指向 apply().call(),bind()个人笔记

    写在前头: 本站内容为个人学习记录,纯属个人观点,不喜勿喷,欢迎指正! 笔记记录缘由:JavaScript的流行趋势已经势不可挡,衍生的AngularJs,Node.js,BootStrmp中小企业的 ...

  2. sklearn了解一下

    sklearn是机器学习中一个常用的python第三方模块,网址:http://scikit-learn.org/stable/index.html ,里面对一些常用的机器学习方法进行了封装,在进行机 ...

  3. Spring Security-- 验证码功能的实现

    spring security4 添加验证码 http://www.itwendao.com/article/detail/165400.html http://www.itdadao.com/art ...

  4. 多线程统计次数问题:即count++

    场景:日志需要统计每天数据上传的次数和上传的数据量. 如果是单线程可以使用简单的int count = 0:count++,但很多情况都是多线程环境所以就不能单纯的使用count++了!!! 多线程环 ...

  5. itchat库初探--微信好友全头像的拼接

        代码: import itchat import math import PIL.Image as Image import os itchat.auto_login() friends = ...

  6. java没有firendly访问类型

    java中只有public.private.protected.default这几种修饰符,没有friendly修饰符,没加修饰符就是friendly.friendly只是一种说法,把它认为是defa ...

  7. java.lang.IllegalArgumentException异常 数据库别名问题

    java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: Path expect ...

  8. BZOJ_2343_[Usaco2011 Open]修剪草坪 _单调队列_DP

    BZOJ_2343_[Usaco2011 Open]修剪草坪 _单调队列_DP 题意: N头牛,每头牛有一个权值,选择一些牛,要求连续的不能超过k个,求选择牛的权值和最大值 分析: 先考虑暴力DP,f ...

  9. 字典---python

    Python 字典(Dictionary) 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包 ...

  10. Postman----基础使用篇(没有接口文档的情况下如何着手做接口测试)

    [备注说明]内文中的图片由于页面的限制,图片显示不清晰,为了能更加的看清图片,请点击"图片",点击"右键"选择"在新标签页中打开图片",可查 ...