小编Pat*_*tro的帖子

使用列表而不是装饰模式?

"Head First:Design Patterns"一书中的Decorator Pattern用例让我有了这个问题.我会试着写下来:

这是一个咖啡店系统,有一些咖啡和许多调味品可以放入其中(需要额外付费),你需要能够订购和收取客户所需的任何调味品的咖啡,并避免完全混乱(例如,用于跟踪调味品的布尔值)使用装饰器图案.我们有一个抽象的Beverage类,每种类型的咖啡作为混凝土组件,每种调味品都作为包装Beverage的混凝土装饰器,如下所示:

饮料类图

所以我们有以下过程返回咖啡费用:

咖啡成本代表团

我的问题是:为什么不用列表而不是装饰器来实现它?我们可以在每个饮料中有一份调味品清单,并通过迭代列表来计算成本.要订购咖啡,我们只需要实例化一次并添加所需的调味品,避免声明如下:

// Using second image example
Beverage beverage = new DarkRoast(beverage);
beverage = new Mocha(beverage);
beverage = new Whip(beverage);
Run Code Online (Sandbox Code Playgroud)

除此之外,我们将有更多的灵活性来进行操作,比如给咖啡打折,不包括它的调味品,一旦我们没有装饰员包装咖啡.这是一个长期研究过的问题,我知道我错过了一些东西或者说我错了,所以如果你对此有任何想法,我很想知道并进一步讨论.

java oop design-patterns list decorator

11
推荐指数
1
解决办法
1453
查看次数

野牛:减少/减少非代币上的冲突

因此,我正在为C创建编译器,而我目前正在创建文字,变量和函数表。

这条规则使我减少/减少冲突:

lval: ID { check_var(); }
| ID { check_var(); } LBRACK NUM RBRACK
| ID { check_var(); } LBRACK ID { check_var(); } RBRACK;
Run Code Online (Sandbox Code Playgroud)

错误如下:

parser.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
parser.y:104.6-21: warning: rule useless in parser due to conflicts [-Wother]
 | ID { check_var(); } LBRACK ID { check_var(); } RBRACK;
      ^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

我有优先规则,可以避免减少令牌上的错误,但是现在它指向的是非令牌,所以不确定我应该怎么做?

如果有任何帮助,这些是我的优先规则:

%token INPUT OUTPUT WRITE
%token  RETURN VOID IF ELSE WHILE ASSIGN SEMI COMMA
%token LPAREN RPAREN LBRACE RBRACE LBRACK RBRACK
%token NUM ID …
Run Code Online (Sandbox Code Playgroud)

c compiler-construction parsing bison

0
推荐指数
1
解决办法
43
查看次数