Java 代理模式 (利用 interface )

来源:互联网 发布:肯园淘宝授权店 编辑:程序博客网 时间:2024/06/11 10:54

问题引入:

在游戏接入渠道SDK的时候,都是调用渠道SDK的Login函数,然后会有一个Listener。Listener自动列出函数,我们去实现这些函数就可以了。比如获取userid登录游戏。但这是怎么实现的?
这里用简单的代码来举例。


AwySDK这个类来模拟渠道SDK,Login函数来模拟SDK的登录。

package com.example.extendtest;public class AwySDK {public AwySDK(){}//登录SDKpublic void Login(AwyLoginListener listener){if(1==1) //模拟SDK登录成功,返回userid{String userid="123345";listener.LoginSuccess(userid);}else{listener.LoginFaild();}}interface AwyLoginListener{void LoginSuccess(String userid);//登录成功返回useridvoid LoginFaild(); //登录失败,没有参数}}

然后在MainActivity里面来调用Login函数

package com.example.extendtest;import com.example.extendtest.AwySDK.AwyLoginListener;import android.os.Bundle;import android.app.Activity;import android.util.Log;import android.view.Menu;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);AwySDK sdk=new AwySDK();sdk.Login(new AwyLoginListener() {@Overridepublic void LoginSuccess(String userid) {// TODO Auto-generated method stubLog.i("cp","login success userid = "+userid);}@Overridepublic void LoginFaild() {// TODO Auto-generated method stubLog.i("cp","login faild");}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}


C#里面直接用Action,很方便。

Java里面也可以的。

当然C/C++ 也可以。。指针 模板 都可以

0 0
原创粉丝点击