[ C ] design pattern

Cplusplus
头像
rubyish
渐入佳境
渐入佳境
帖子: 38
注册时间: 2018年04月23日 09:58
拥有现金: 锁定
Has thanked: 18 times
Been thanked: 14 times
联系:

[ C ] design pattern

帖子 #1 rubyish » 2020年05月11日 11:58

依賴 GCC extension, 非標準C語言。
支援 簡單的 class, private, extends, interface, abstract class, polymorphism. :shy_smile :shy_smile
上次由 rubyish 在 2020年07月18日 20:54,总共编辑 2 次。
$_

头像
523066680
Administrator
Administrator
帖子: 492
注册时间: 2016年07月19日 12:14
拥有现金: 锁定
储蓄: 锁定
Has thanked: 58 times
Been thanked: 96 times
联系:

Re: [ C ] design pattern

帖子 #2 523066680 » 2020年05月11日 22:59

rubyish 写了:依賴 GCC extension, 非標準C語言。


设计模式

(以前有段时间你只发英文,是和工作使用的系统有关吗?

头像
rubyish
渐入佳境
渐入佳境
帖子: 38
注册时间: 2018年04月23日 09:58
拥有现金: 锁定
Has thanked: 18 times
Been thanked: 14 times
联系:

Re: [ C ] design pattern

帖子 #3 rubyish » 2020年07月18日 19:17

:shy_smile :shy_smile 才發現好像沒有一一對應。這根據網路上的範例。而範例又基於 深入淺出設計模式 (Head First Design Patterns)
先發布個預覽。這還要重寫一遍。 :crazylaugh4 :exciting4
策略模式 (Strategy pattern)

代码: 全选

/* gcc version 9.2.0 (GCC) */

#include <stdio.h>
#include <stdlib.h>
#include "..."

interface(Flyable) {
    void (*fly)(void);
};
interface(Quackable) {
    void (*quack)(void);
};
abstract class(Duck) {
    void (*set_flyable)(Flyable*);
    void (*set_quackable)(Quackable*);
    void (*fly)(void);
    void (*quack)(void);
  private(Duck);
    Flyable* flyable;
    Quackable* quackable;
    abstract void (*display)(void);
};

// SuperFly
Class(SuperFly) { implements(Flyable); };
void SuperFly_fly(void) { puts("I'm super flying!"); }
__new__(SuperFly) { meth(SuperFly, fly); }

// SuperQuack
Class(SuperQuack) { implements(Quackable); };
void SuperQuack_quack(void) { puts("I'm super quacking!"); }
__new__(SuperQuack) { meth(SuperQuack, quack); }

// impl Duck
void Duck_set_flyable(Flyable* fly) {
    is(Duck);
    this->flyable = fly;
}
void Duck_set_quackable(Quackable* quack) {
    is(Duck);
    this->quackable = quack;
}
void Duck_fly(void) {
    is(Duck);
    $(this->flyable).fly();
}
void Duck_quack(void) {
    is(Duck);
    $(this->quackable).quack();
}
__new__(Duck) { meth(Duck, set_flyable, set_quackable, fly, quack); }

// super duck
Class(SuperDuck) { extends(Duck); };
void SuperDuck_display(void) { puts("I'm super duck!"); }
__new__(SuperDuck) {
    super(Duck);
    meth(SuperDuck, display);
}

/*   m a i n   */
__main__(void) {
    my duck  = new (SuperDuck);
    my fly   = new (SuperFly);
    my quack = new (SuperQuack);
    $(duck).set_flyable(fly);
    $(duck).set_quackable(quack);
    $(duck).fly();
    $(duck).quack();
    $(duck).display();
}
$_

头像
rubyish
渐入佳境
渐入佳境
帖子: 38
注册时间: 2018年04月23日 09:58
拥有现金: 锁定
Has thanked: 18 times
Been thanked: 14 times
联系:

Re: [ C ] design pattern

帖子 #4 rubyish » 2020年07月18日 19:57

523066680 写了:
rubyish 写了:依賴 GCC extension, 非標準C語言。


设计模式

(以前有段时间你只发英文,是和工作使用的系统有关吗?

:curious1 :curious1 :exciting4 :exciting4 :crazylaugh4 :crazylaugh4
$_

头像
rubyish
渐入佳境
渐入佳境
帖子: 38
注册时间: 2018年04月23日 09:58
拥有现金: 锁定
Has thanked: 18 times
Been thanked: 14 times
联系:

Re: [ C ] design pattern

帖子 #5 rubyish » 2020年07月18日 21:01

這還要重寫一遍。
基於 深入淺出設計模式 :exciting4 :exciting4 :exciting4
$_


回到 “C/C++”

在线用户

用户浏览此论坛: 没有注册用户 和 9 访客