分页: 1 / 1

[ C ] design pattern

发表于 : 2020年05月11日 11:58
rubyish
依賴 GCC extension, 非標準C語言。
支援 簡單的 class, private, extends, interface, abstract class, polymorphism. :shy_smile :shy_smile

Re: [ C ] design pattern

发表于 : 2020年05月11日 22:59
523066680
rubyish 写了:依賴 GCC extension, 非標準C語言。
设计模式

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

Re: [ C ] design pattern

发表于 : 2020年07月18日 19:17
rubyish
: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();
}

Re: [ C ] design pattern

发表于 : 2020年07月18日 19:57
rubyish
523066680 写了:
rubyish 写了:依賴 GCC extension, 非標準C語言。
设计模式

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

Re: [ C ] design pattern

发表于 : 2020年07月18日 21:01
rubyish
這還要重寫一遍。
基於 深入淺出設計模式 :exciting4 :exciting4 :exciting4