基于C语言的面向对象设计模式(持续更新)

这篇具有很好参考价值的文章主要介绍了基于C语言的面向对象设计模式(持续更新)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

首先这篇文章只是初步的尝试,不涉及过于高深的编程技巧;同时需要表明的是,面向对象只是一种思想,不局限于什么样的编程语言,不可否认的是基于面向对象特性而设计的语言确实要比面向过程式的语言更加容易进行抽象和统筹,可以说面向对象的设计模式可以很大程度上摆脱过程的实例,但要论完整的应用来讲,设计模式也还是跳不出最终被过程挑选的命运,对象只是对象,过程才是对象真正的实践战场

对象设计

对象即模块,模块即文件

在C语言环境中,不要想着能实现C++这种真正面向对象特性加持的效果,我们只能实现阉割版的效果,主要还是面向对象思想的运用。

对象基本结构

对象的基本结构就是抽象出对对象最本质的认识,即类型定义;一个类可以有多个对象,而对象与对象之间不仅是逻辑分离的,也是物理分离的,虽然可以用相同的方法和属性。但在C语言中要想实现多例,就必须传入该对象的引用,当然可以实现更简单的多例模式,目前我知道的只有单线程的情况下才能保证安全,可以参考c语言实现this指针效果里的多例实现方式,保守点,还是更推荐传入引用的方式。

/* 前向声明 */
struct _AnyObject;
/* 对象基本结构定义 */
typedef struct{
	/* 可直接访问属性 */
	anytype Attr1;
	anytype Attr2;
	/* 可间接访问属性 */
	struct{
		anytype _Attr3;
		/* 通过指针可实现访问私有属性 */
		anytype *_Attr4;
	}PrivatedAttr;
	/* 初始化方法 */
	anytype (*Init)(struct _AnyObject *,anytype,...);
	/* 接口方法 */
	anytype (*Func1)(struct _AnyObject *,anytype,...);
	anytype (*Func2)(struct _AnyObject *,anytype,...);
}AnyObject;

一般情况下,对象都具有属性方法,并且还有访问权限的限制,但C语言存在的访问权限方式似乎无法对结构体成员单独进行控制,const似乎也无法实现。所以私有属性和方法只能以文件级的static来进行访问限制了,而对象结构体里面使用一个嵌套结构体作为另一种表征对象私有属性的方式,寄希望于人的自觉;同时如果需要的话,这样也提供了一种外部访问真正static私有属性的一种方式,无非就是指针的使用。

初始化方法与接口定义

主要用于初始化对象的属性和接口方法的分配,可以为每个对象定义各自的初始化方法和接口方法,当然也可以用同一种方法,但要保证方法的可重入性

/* 初始化方法 */
anytype Obj1_Init(AnyObject *obj,anytype arg,...){
	/* 属性初始化 */
	obj->Attr1 = arg;
	/* 接口方法分配定义 */
	obj->Func1 = &Obj1_Func1;
}
/* 接口方法定义 */
anytype Obj1_Func1(AnyObject *obj,anytype arg,...){
	/* 操作对象属性 */
}

实例化对象

/* 实例即定义,必须为每个对象分配好初始化函数 */
AnyObject obj1 = {.Init = Obj1_Init};
AnyObject obj2 = {.Init = Obj2_Init};
/* obj1_init可以和obj2_init一样 */
/* 需要手动进行初始化 */
obj1.Init(anytype,...);
obj2.Init(anytype,...);

this指针

c语言实现this指针效果

这种方式对于单例很方便,简化方法调用方式,不用每次都传入引用,但对于多例就要考虑线程安全问题了。

链式调用

主要通过返回对象自身的引用来实现。

AnyObject *ChainFunc(AnyObject *,anytype,...);

结语

后面再学到什么新的实现会持续更新在这篇文章里,同时也接受批评和改正。文章来源地址https://www.toymoban.com/news/detail-846647.html

到了这里,关于基于C语言的面向对象设计模式(持续更新)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++设计模式_02_面向对象设计原则

    变化是复用的天敌!面向对象设计或者说使用了抽象原则的面向对象设计最大的优势在于#

    2024年02月11日
    浏览(52)
  • 设计模式学习笔记 - 面向对象 - 3.面向对象比面向过程有哪些优势?面向过程真的过时了吗?

    在过往的工作中,我发现很多人搞不清面向对象和面向过程的区别,总认为使用面向对象编程语言来开发,就是在面向面向对象编程了。而实际上,他们只是在用面向对象编程语言,编写面向过程风格的代码而已,并没有发挥面向对象编程的优势。这就相当于手握一把屠龙刀

    2024年02月22日
    浏览(49)
  • C++中的面向对象设计模式实践

    面向对象程序设计(Object-Oriented Programming,简称OOP)是一种将程序设计问题分解为对象的思维方式。它通过定义对象和对象之间的关系,将问题模型化并转化为代码实现。在面向对象设计模式中,设计模式是一种被普遍接受的解决问题的方法论。 C++作为一种多范式编程语言,

    2024年01月17日
    浏览(44)
  • 设计模式 -- 策略模式(传统面向对象与JavaScript 的对比实现)

    规则:根据员工的工资基数和年底绩效情况计算年终奖 初级实现 缺点 多重 if else 违反开发-封闭原则,可维护性差 复用性差 使用组合函数重构代码 使用组合函数来重构代码,把各种算法封装到一个个的小函数里面,这些小函数有着良好的命名,可以一目了然地知道它对应着

    2024年02月11日
    浏览(67)
  • 2.python设计模式【面向对象设计的SOLID原则 基础概念】

    概念:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。即软件实体应该尽量在不修改原有代码的情况下进行扩展 概念:所有引用父类的地方必须能透明地使用其子类的对象 概念:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不依赖细节;细节

    2024年02月16日
    浏览(51)
  • 一网打尽java注解-克隆-面向对象设计原则-设计模式

    注解 :也叫标注,用于包、类、变量、方法、参数上。可以通过反射获取标注。可以在编译期间使用,也可以被编译到字节码文件中,运行时生效。 内置注解 :Java语言已经定义好的注解。 @Overread :用于方法重写。 @Deprecated :标记过时方法。 @SuppressWarnings :指示编译器去

    2024年02月11日
    浏览(46)
  • 【WinForm】C#实现商场收银软件,从面向过程到面向对象,设计模式的应用

    实现商场收银系统从简单的面向过程到面向对象的演变。 最容易想到的: 单价*数量=总价 根据输入的单价和数量,直接计算,将结果显示在listbox控件中。 重置按钮可以清零。 1、运行效果 2、界面设计 3、代码 版本2在版本1的基础上增加了打折优惠。 1、运行效果 打折下拉框

    2024年02月09日
    浏览(45)
  • 设计模式学习笔记 - 面向对象 - 2.封装、抽象、继承、多态分别用来解决哪些问题?

    封装 也叫作信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方法(或者叫作函数)来访问内部信息或数据。 下面这段代码是一个简化版的虚拟钱包的代码实现。在金融系统中,我们会给每个用户创建一个虚拟钱包,用来记录用户在我们

    2024年02月21日
    浏览(46)
  • 【Java基础教程】(十五)面向对象篇 · 第九讲:抽象类和接口——定义、限制与应用的细节,初窥模板设计模式、工厂设计模式与代理设计模式~

    掌握 抽象类和接口的定义、使用、区别、常见设计模式; 抽象类是代码开发中的重要组成部分,利用抽象类可以明确地定义子类需要覆写的方法,这样相当于在语法程度上对子类进行了严格的定义限制,代码的开发也就更加标准。下面具体介绍抽象类的概念。 普通类可以直

    2024年02月16日
    浏览(48)
  • java的面向对象编程(oop)——static概述及初始单例设计模式

    过了入门阶段,开始学习进阶语法了。每天进步一点点,打好基础,daydayup! 什么是面向对象编程(oop),可以看这篇 java的面向对象编程(oop)概述及案例  static的意思为静态,用于修饰成员变量及成员方法。 成员变量根据有无static可以分为两种 ——类变量及实例变量 1,类

    2024年01月19日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包