当前位置:  编程技术>移动开发
本页文章导读:
    ▪技术博客珍藏        技术博客收藏 popcorny的碎碎唸http://popcornylu.blogspot.co.uk/易飞扬的博客http://www.yifeiyang.net/Learn iPhone App Development with FourTenhttp://learn-iphone-app-development.com/ ......
    ▪ 下令模式-(1)基本认识        命令模式--(1)基本认识 什么是命令模式:     将请求(命令)封装为对象,实现将“发出请求的对象”与“接收和执行这些请求的对象”分隔开来   命令模式中有几个关键的概念:   客户.........
    ▪ VideoView 相干       VideoView 相关 http://blog.csdn.net/chenzheng_java/article/details/6258456http://blog.csdn.net/wolfman79/article/details/7868975http://blog.csdn.net/zrzlj/article/details/8050633总结一下,如果是VideoView要MP4处理成progressive streama.........

[1]技术博客珍藏
    来源: 互联网  发布时间: 2014-02-18
技术博客收藏
popcorny的碎碎唸
http://popcornylu.blogspot.co.uk/

易飞扬的博客
http://www.yifeiyang.net/

Learn iPhone App Development with FourTen
http://learn-iphone-app-development.com/

    
[2] 下令模式-(1)基本认识
    来源: 互联网  发布时间: 2014-02-18
命令模式--(1)基本认识

什么是命令模式:

 

 

将请求(命令)封装为对象,实现将“发出请求的对象”与“接收和执行这些请求的对象”分隔开来

 

命令模式中有几个关键的概念:

 

客户:发起请求的对象,开关,或者你(因为开关是由你来控制的)

命令:具体的一个命令,比如开灯命令,关灯命令

执行者:接收和执行请求的对象,比如电灯,是开灯关灯命令的接收者和执行者

调用者:通过这个对象来实现客户(开关或你)和执行者(电灯)之间的耦合

 

命令模式支持撤销。对于这个demo来说,开灯这个命令对应的撤销就是关灯。同理:关灯命令对应的撤销就是开灯。

LightOnCommand.java文件可以看到这一点,我通过一个List维护着用户的开灯和关灯的命令,当用户需要撤销的时候,从取出这个List的最后一个Command,执行它的undo()就实现了撤销。当然实现后你还要记得remove它,才能实现撤销到更早的Command。

这里我用一个ImageView当做灯泡。通过切换不同的图片,来实现on和off.

 

 

假如现在我要使用命令模式做一个类似按钮打开和关闭电灯的引用。实现效果如下图:

 

 

下面是工程结构:

 

 

 

 

我将开灯和关灯这两个命令封装成对象,它们都实现了Command接口,RemoteInvoker就是调用者。

下面上代码:

 

Command.java:

 

 

/**
 * 这是第一步,让所有的命令对象实现相同的包含一个方法的接口
 * 
 * */
public interface Command {

	public void execute();
	public void undo();
}
 

 

实现这个接口:

LightOnCommand.java:(LightOffCommand.java是类似的,只不过图片是相反的,这里就不贴代码了)

 

 

public class LightOnCommand implements Command{

	private ImageView light;
	
	public LightOnCommand(ImageView light){
		
		this.light = light;
	}
	
	@Override
	public void execute() {
		
		light.setBackgroundResource(R.drawable.light_on);
	}
	
	@Override
	public void undo() {
		
		light.setBackgroundResource(R.drawable.light_off);
	}
	
	@Override
	public String toString() {

		return "On Command";
	}
	
}
 

 

RemoteInvoker.java:

 

 

/**
 * 这个就是遥控器类,这个类在这里还负责撤销操作
 * 
 * */
public class RemoteInvoker {

	Command slot;
	Command onCommand;
	Command offCommand;
	LinkedList<Command> commandList;
	Context context;
	
	public RemoteInvoker(Context context) {
		
		this.context = context;
		commandList = new LinkedList<Command>();
	}
	
	public void setCommand(Command onCommand, Command offCommand){
		
		this.onCommand = onCommand;
		this.offCommand = offCommand;
	}
	
	public void onButtonWasPressed(){
		
		onCommand.execute();
		commandList.add(onCommand);
	}
	
	public void offButtonWasPressed(){
		
		offCommand.execute();
		commandList.add(offCommand);
	}
	
	public void undoButtonWasPressed(){
		
		for(Command c: commandList){
			Log.e("**********:", ":"+c.toString());
		}
		
		int sizeOfCommands = commandList.size();
		if(sizeOfCommands <= 0){
			
			Toast.makeText(context, "当前已经没有要撤销的对象了", Toast.LENGTH_SHORT).show();
		}else{
			
			Command lastCommand = commandList.get(sizeOfCommands - 1);//获取最后一个命令对象,执行它的undo方法
			lastCommand.undo();
			commandList.removeLast();//删除最后一个命令
		}
		
		
	}
}
 

 

最后是调用者类

MainActivity.java:

 

 

public class MainActivity extends Activity {

	private RemoteInvoker remoteInvoker;
	private LightOnCommand lightOnCommand;
	private LightOffCommand lightOffCommand;
	private ImageView light;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        light = (ImageView)findViewById(R.id.iv_light);//灯泡
        Button btnOn = (Button)findViewById(R.id.btn_light_on);//开
        Button btnOff = (Button)findViewById(R.id.btn_light_off);//关
        Button btnUndo = (Button)findViewById(R.id.btn_undo);//撤销
        
        //步骤1
        lightOnCommand = new LightOnCommand(light);//实例化命令
        lightOffCommand = new LightOffCommand(light);
        
        //步骤2
        remoteInvoker = new RemoteInvoker(this);
        remoteInvoker.setCommand(lightOnCommand, lightOffCommand);//设置命令
        
        btnOn.setOnClickListener(clickListener);
        btnOff.setOnClickListener(clickListener);
        btnUndo.setOnClickListener(clickListener);
    }

    private View.OnClickListener clickListener = new View.OnClickListener() {
		
		@Override
		public void onClick(View v) {
			switch (v.getId()) {
			case R.id.btn_light_on://开灯
				remoteInvoker.onButtonWasPressed();
				break;
			case R.id.btn_light_off://关灯
				remoteInvoker.offButtonWasPressed();
				break;
			case R.id.btn_undo://撤销
				remoteInvoker.undoButtonWasPressed();
				break;
			default:
				break;
			}
		}
	};
    
}
 

 

 

 

这样做之后,你就当你要开灯或关灯的时候,就不需要直接对电灯的实例进行操作了,而是通过RemoteInvoker对象,你只要告诉这个对象,你按下了哪个按钮,其它的事情交个这个对象去处理。那么你和电灯之间就解耦了。

还有一点好处是,你可以实现命令的撤销。

 

当然,命令模式还支持批量执行命令,以及批量撤销命令。比如我只要按下一个按钮,那么多个命令(打开电灯,打开空调,打开电视就都开始执行),当我按关闭按钮,那么就撤销前面所有的命令。

 

还有队列请求和日志请求的功能,这些等到下次再结合实例讲解演示。

 

 

 

 

 

 

 

 

1 楼 sakajiaofu 昨天  
主要实现了调用者 和真正的动作实现者之间的解耦
也就是说中间会有一个过渡者 这个过渡者会和这两者进行交互

2 楼 michaelye1988 昨天  
sakajiaofu 写道
主要实现了调用者 和真正的动作实现者之间的解耦
也就是说中间会有一个过渡者 这个过渡者会和这两者进行交互


嗯,说的很好啊,这个过渡者就是RemoteInvoker。一对比,觉得自己语言能力还有待加强。谢谢指教。

    
[3] VideoView 相干
    来源: 互联网  发布时间: 2014-02-18
VideoView 相关
http://blog.csdn.net/chenzheng_java/article/details/6258456

http://blog.csdn.net/wolfman79/article/details/7868975


http://blog.csdn.net/zrzlj/article/details/8050633


总结一下,如果是VideoView要MP4处理成progressive streamable模式的,或者支持rtsp才可播放。。。大概应该这样的

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
php开源软件 iis7站长之家
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3