Facebook Sharer
选择您要替换的背景颜色:
【农历新年】背景图片:
个性化设定
 注册  找回密码
查看: 1750|回复: 15
打印 上一主题 下一主题

interface的不解

[复制链接]

5

主题

0

好友

59

积分

中级会员

Rank: 2Rank: 2

跳转到指定楼层
1#
发表于 2010-6-23 02:43 PM |只看该作者 |倒序浏览
我好像在这里看过关于interface的讨论,但现在却找不到那帖了。
对于这interface我还是一知半解,可能一半都没有。
看过了好多关于interface的解释,但都不能领悟到关键要怎么用和在什么情况适合用interface。
每次看到的都放在class里,并只是用于普通的set 和get。
那位大哥可以解释吗?
十分,非常,真心的感谢!




收藏收藏0

46

主题

6

好友

6456

积分

百变名嘴

Rank: 13Rank: 13Rank: 13Rank: 13

2#
发表于 2010-6-23 06:46 PM |只看该作者
回复 1# my_world


这帖好 @@。。。

上次那个帖是我开的。 不过现在是懂怎么用, 但是什么情况下真正会用到还不是很清楚。

帮你顶下, 顺便Share 你我知道的地方。

就可能, 也许可能。

比如说, 你有这样的 Class:

Invoice , PurchaseOrder 还是什么。

你需要计算他们的 Total Amount。


*假设 Purchase Order / Invoice 两个的算法不一样。

你有两种做法, 你可以有个 Super , 继承 Invoice, PO, 然后Abstract 的 method
CalculateTotalAmount();

可是万一有天 除了, Invoice , Purchase Order 的单据需要 CalculateTotalAmount() ,  可是他们不能继承Super, 因为Field, Properties 可能不一样。

那么Interface 就是最好的方法。

比如 : ICalculate

让那些需要CalculateTotalAmount 的 Class 来Implement。

*献丑了 *.*....


回复

使用道具 举报

46

主题

6

好友

6456

积分

百变名嘴

Rank: 13Rank: 13Rank: 13Rank: 13

3#
发表于 2010-6-23 06:48 PM |只看该作者
回复 1# my_world


    http://www.dofactory.com/Patterns/Patterns.aspx
看看这贴吧。 有些设计模式。 可是我到现在还是不明白为什么需要那么用。


回复

使用道具 举报

31

主题

0

好友

1228

积分

黄金长老

Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8Rank: 8

4#
发表于 2010-6-23 09:57 PM |只看该作者
我不说实际上怎么 code (自己去学).
我来说说一个比喻上的实际用途.

大家应该都会有玩过类似这样的 RPG 吧,
游戏里面会有很多 class, 例如 warrior, magician, archer 等等.
然后每个人都会有自己的 Attack, Skill, Run.

游戏的 code 里面, 都会用到 A.Attack, B.Attack, 所以这时候如果 A 或 B 的 class 里面没有 Attack 这个 function 的话不行.

这时候, 如果说做一个 Abstract class 叫 CharacterClass 然后用 3 个来 inherit 的话, 又不太对的样子 (因为 3 个都继承同一个 Attack, 然后还要设计自己的 Attack 方式来 overload? 不是多此一举吗?);

这时候, 最好的方法就是写一个 interface, 叫 ICharacter, 里面 define 一定要有的 functions (Attack, Skill, Run), 然后写 3 个 class 来 implement.


回复

使用道具 举报

5

主题

0

好友

59

积分

中级会员

Rank: 2Rank: 2

5#
发表于 2010-6-23 11:33 PM |只看该作者
回复 4# ~Zero


    那么照这例子来说的话,现在已经有3个class了。
  
  Warrior A
    Magician B
    Archer C

    这Icharacter里也defined3个不同的functions,然后写3个不同的class来implement。。
  如果我用一个class来implement全部的话也能的,对吧?
  
  还想知道的是 -〉 如果用3个不同的class来做Attack , skill, run. 所以a或b或c要用时都会是个普通的attack,skill和run吧。对吗?
  如果个自有不同的attack就的用个自的inherit了,对吗?

  可否说是公用一个施舍呢?
  如果问了一些太肤浅的,请多多包涵~~


  我在看着阿宅(宅男)的link~
    在研究着~


回复

使用道具 举报

13

主题

0

好友

2113

积分

白金长老

Rank: 10

6#
发表于 2010-6-23 11:59 PM |只看该作者
我也不是很懂的说

他是一个class 的底层
如 zero 说的

ICharacter 就定义了 基本的架构
然后 其他的  
warrior, magician, archer
都是已ICharacter 为根本

ICharacter 就定义了
method = > run,attack,walk,defence
property => magic power, healty power, defence level ....etc

warrior, magician, archer  如果 inherit 了 就不用 全部class有不同的咯

如果要多个新的 character 如 Paladins,Hunters  那就 一定要跟 ICharacter 的定义

你一定会问 那如果是 elf , orcs 呢??
覆盖咯 双 interface 咯

如有不对 请指教我哦 


回复

使用道具 举报

46

主题

6

好友

6456

积分

百变名嘴

Rank: 13Rank: 13Rank: 13Rank: 13

7#
发表于 2010-6-24 12:12 AM |只看该作者
如果这样呢??

  1. class Character
  2. {
  3. ....
  4. abstract void Run();

  5. abstract void Attack();

  6. abstract void Defence();

  7. }

  8. class Magician inherit Character implement ISummon
  9. {
  10. overide void Attack(){}
  11. overide void Defence(){}
  12. overide void Run(){}
  13. void Summon()
  14. {
  15. //Summon Different monster than summoner
  16. }

  17. }

  18. class Knight inherit Chatacter
  19. {
  20. overide void Attack(){}
  21. overide void Defence(){}
  22. overide void Run(){}
  23. }

  24. class Archer inherit Character
  25. {
  26. overide void Attack(){}
  27. overide void Defence(){}
  28. overide void Run(){}
  29. }

  30. class Summoner inherit Character implement ISummon
  31. {
  32. overide void Attack(){}
  33. overide void Defence(){}
  34. overide void Run(){}
  35. void Summon()
  36. {
  37. //Summon monster
  38. }
  39. }

  40. interface ISummon
  41. {
  42.   void Summon();
  43. }
复制代码
基本动作 让他们去 继承 ,overide, Summon, Black Magic 等, 有个 接口的话??

请指教, 谢谢。


回复

使用道具 举报

13

主题

0

好友

2113

积分

白金长老

Rank: 10

8#
发表于 2010-6-24 12:21 AM |只看该作者
宅男-兜着走
你的对了 呵呵 
但要自己下手 写了才能 领悟 他的用法
文字很难懂

你override的意思 是 每个的Character 的defence , run , attack 都各有长短
骑士 的 run 最快(最大值) 
魔法师的 run 是慢的??


回复

使用道具 举报

13

主题

0

好友

2113

积分

白金长老

Rank: 10

9#
发表于 2010-6-24 12:22 AM |只看该作者
class Character

{

....

abstract void Run();



abstract void Attack();



abstract void Defence();



}

是基本动作咯 


回复

使用道具 举报

46

主题

6

好友

6456

积分

百变名嘴

Rank: 13Rank: 13Rank: 13Rank: 13

10#
发表于 2010-6-24 12:43 AM |只看该作者
本帖最后由 宅男-兜着走 于 2010-6-24 12:45 AM 编辑

回复 8# goodday


    因为我考虑到

魔法师, 因为是 Cast 魔法的, 所以攻击力可能低, Agility 可能会影响到 Run 的成功率, 或速度。 所以我 让每个 Character 有相同的 基本动作, 但是不同的效果。

Interface Summon 方面 我想到, 可能只有 Summoner 有 召唤的法术。 可是因为我考虑到魔法师可能也有。
所以就做成了 Interface 来 让法师们 Implements ==

说是简单啦。 但是实际应用起来的话。==

Class Character 的话 里面是基本动作。 我想到的是如此, 不管是 Orc 还是 Elf, 应该都会 打人, 逃跑, 防卫 ==

补充 : 确实是 工人 不具攻击的角色, 可以设置成 Attack 0 或 1 等低值。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

JBTALKS.CC |联系我们 |隐私政策 |Share

GMT+8, 2024-10-30 09:30 AM , Processed in 0.357381 second(s), 28 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

Ultra High-performance Dedicated Server powered by iCore Technology Sdn. Bhd.
Domain Registration | Web Hosting | Email Hosting | Forum Hosting | ECShop Hosting | Dedicated Server | Colocation Services
本论坛言论纯属发表者个人意见,与本论坛立场无关
Copyright © 2003-2012 JBTALKS.CC All Rights Reserved
合作联盟网站:
JBTALKS 马来西亚中文论坛 | JBTALKS我的空间 | ICORE TECHNOLOGY SDN. BHD.
回顶部