首页 > 其他分享 >C语言和设计模式(之开篇)

C语言和设计模式(之开篇)

时间:2022-11-23 13:03:13浏览次数:75  
标签:开篇 void virtual C语言 music file 设计模式 struct

    关于软件设计方面的书很多,比如《​​重构​​​》,比如《​​设计模式​​》。至于软件开发方式,那就更多了,什么极限编程、精益方法、敏捷方法。随着时间的推移,很多的方法又会被重新提出来。


    其实,就我个人看来,不管什么方法都离不开人。一个人写不出二叉树,你怎么让他写?敏捷吗?你写一行,我写一行。还是迭代?写三行,删掉两行,再写三行。项目的成功是偶然的,但是项目的失败却有很多原因,管理混乱、需求混乱、设计低劣、代码质量差、测试不到位等等。就软件企业而言,没有比优秀的文化和出色的企业人才更重要的了。



    从软件设计层面来说,一般来说主要包括三个方面:

    (1)软件的设计受众,是小孩子、老人、女性,还是专业人士等等;


    (2)软件的基本设计原则,以人为本、模块分离、层次清晰、简约至上、适用为先、抽象基本业务等等;


    (3)软件编写模式,比如装饰模式、责任链、单件模式等等。



    从某种意义上说,设计思想构成了软件的主题。软件原则是我们在开发中的必须遵循的准绳。软件编写模式是开发过程中的重要经验总结。灵活运用设计模式,一方面利于我们编写高质量的代码,另一方面也方便我们对代码进行维护。毕竟对于广大的软件开发者来说,软件的维护时间要比软件编写的时间要多得多。编写过程中,难免要有新的需求,要和别的模块打交道,要对已有的代码进行复用,那么这时候设计模式就派上了用场。我们讨论的主题其实就是设计模式。



    讲到设计模式,人们首先想到的语言就是c#或者是java,最不济也是c++,一般来说没有人会考虑到c语言。其实,我认为设计模式就是一种基本思想,过度美化或者神化其实没有必要。其实阅读过linux kernel的朋友都知道,linux虽然自身支持很多的文件系统,但是linux自身很好地把这些系统的基本操作都抽象出来了,成为了基本的虚拟文件系统。


    


    举个例子来说,现在让你写一个音乐播放器,但是要支持的文件格式很多,什么ogg,wav,mp3啊,统统要支持。这时候,你会怎么编写呢?如果用C++语言,你可能会这么写。

class music_file
{
HANDLE hFile;

public:
void music_file() {}
virtual ~music_file() {}
virtual void read_file() {}
virtual void play() {}
virtual void stop() {}
virtual void back() {}
virtual void front() {}
virtual void up() {}
virtual void down() {}
};

    其实,你想想看,如果用C语言能够完成相同的抽象操作,那不是效果一样的吗?


typedef struct _music_file
{
HANDLE hFile;
void (*read_file)(struct _music_file* pMusicFile);
void (*play)(struct _music_file* pMusicFile);
void (*stop)(struct _music_file* pMusicFile);
void (*back)(struct _music_file* pMusicFile);
void (*front)(struct _music_file* pMusicFile);
void (*down)(struct _music_file* pMusicFile);
void (*up)(struct _music_file* pMusicFile);
}music_file;

    当然,上面的例子比较简单,但是也能说明一些问题。写这篇文章的目的一是希望和朋友们共同学习模式的相关内容,另一方面也希望朋友们能够活学活用,既不要迷信权威,也不要妄自菲薄。只要付出努力,付出汗水,肯定会有收获的。有些大环境你改变不了,那就从改变自己开始。万丈高楼平地起,一步一个脚印才能真真实实学到东西。如果盲目崇拜,言必google、微软、apple,那么除了带来几个唾沫星,还能有什么受用呢?无非白费了口舌而已。



    希望和大家共勉。




标签:开篇,void,virtual,C语言,music,file,设计模式,struct
From: https://blog.51cto.com/feixiaoxing/5881013

相关文章

  • 软件设计模式白话文系列(十四)策略模式
    1、模式描述定义一个算法的系列,将其各个分装,并且使他们有交互性。策略模式使得算法在用户使用的时候能独立的改变。在Java中,从JDK1.8开始支持函数式编程,就是策略模式......
  • c语言找不到静态库文件,[C语言] 解决引用openssl静态库libcrypto.a和libssl.a出现und
    https://blog.csdn.net/weixin_33656298/article/details/117239140?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIS......
  • C语言中调用可执行程序的方法。
    在C/C++程序中,经常需要调用其它的程序来先成某项任务,例如其它的C/C++程序、操作系统命令或Shell脚本,C/C++提供了exec函数族和system函数来实现这个功能。一、exce函数族exec......
  • 从C语言到C++语言
      ​​C++​​​ 读作“C加加”,是“CPlusPlus”的简称。顾名思义,C++是在​​C语言​​的基础上增加新特性。从语法上看,C语言是C++的一部分,C语言代码几乎不用修改就......
  • C语言系统错误信息
         我们在写程序的时候需要调用C语言提供的库函数,并通过函数的返回值判断调用是否成功。其实在C语言中,还有一个全局变量errno,存放了函数调用过程中产生的错误码。......
  • C语言目录文件操作补充
     本章节补充一些目录和文件操作的更多知识,因为这些知识涉及到时间操作,所以放在时间操作之后的章节中介绍。access库函数access函数用于判断当前操作系统用户对文件或目录的......
  • C语言常量和变量
     一切都是数据    对计算机来说,图片、文字、音乐、视频等都是数据,在计算机中以二进制的0和1存储,数据量越大,0和1就越多。    数据分为静态数据和动态数据。 ......
  • C语言程序的基本结构
    文章目录​​一、C语言基础知识的学习方法​​​​二、C语言程序开发的流程​​​​三、安装C语言的编译器​​​​四、C程序的基本结构​​​​1、程序的注释​​​​2、预......
  • C语言常量、变量和关键字
    文章目录​​一、一切都是数据​​​​1、静态数据​​​​2、动态数据(临时数据)​​​​二、常量​​​​三、变量​​​​1、整数型、字符型、浮点型变量​​​​2、字符串......
  • C语言运算符
    文章目录​​一、C语言的运算符​​​​二、算术运算符​​​​三、赋值运算符​​​​四、sizeof运算符​​​​五、运算符的优先级​​​​六、获取视频教程​​​​七、......