当前位置:  编程技术>软件工程/软件设计
本页文章导读:
    ▪Android MediaPlayer 类图和调用关系       Service side includes 3 components: Service, Service_client and Service_Impementation Service: it will be regiestered to ServiceManager, so Client can locate it, then call Service to create an Service_Client. Service_Client: it will handle each play c.........
    ▪状态机的实现      现在很多人在利用比较流行的开源游戏引擎cocos2d-x开发游戏,在游戏中免不了使用状态机,这里给大家一种我自认为好的状态机的实现O(∩_∩)O~。 先贴上代码: #ifndef BASESTATE_H #define BASESTATE_H .........
    ▪spring集合注入案例       一个user类 package www.xxxx.spring.dao; public class User {  private String name;  private Integer age;  public String getName() {   return name;  }  public void setName(String name) {   this.name = nam.........

[1]Android MediaPlayer 类图和调用关系
    来源: 互联网  发布时间: 2013-11-19

Service side includes 3 components: Service, Service_client and Service_Impementation

Service: it will be regiestered to ServiceManager, so Client can locate it, then call Service to create an Service_Client.

Service_Client: it will handle each play command ( start, stop, seek, etc. ) from Client. it is actually a peer of Client on Service side.

Serivce_Implemenation: it is the function doer, Service_Client will call it when receiving Client request. In other words, Service_Client is an adapter from Client to Serivce_Implemenation

 

Client: Running on Apps process Called by Java via JNI or other native apps to request video play.





Call sequences

Below diagram shows the sequences of 3 catagories

1) Create:

Apps -> MediaPlayer -> MediaPlayerServcie -> MediaPlayerServcie::Client -> MediaPlayerBase ( concrete class is like: StagefrightPlayer )

2) Start ( Call forward)

Apps -> MediaPlayer ->MediaPlayerServcie::Client-> MediaPlayerBase (StagefrightPlayer)

3) Call back

MediaPlayerBase (StagefrightPlayer) -> MediaPlayerServcie::Client ->MediaPlayer

(check more from the diagram)









作者:span76 发表于2013-4-24 22:08:23 原文链接
阅读:46 评论:0 查看评论

    
[2]状态机的实现
    来源: 互联网  发布时间: 2013-11-19

现在很多人在利用比较流行的开源游戏引擎cocos2d-x开发游戏,在游戏中免不了使用状态机,这里给大家一种我自认为好的状态机的实现O(∩_∩)O~。

先贴上代码:

#ifndef BASESTATE_H
#define BASESTATE_H


template <class entity_type>
class BaseState
{
public:
	//BaseState(void){};
	virtual void Enter(entity_type*)=0;
	virtual void Execute(entity_type*)=0;
	virtual void Exit(entity_type*)=0;
	virtual ~BaseState(void){};
};


#endif // !BASESTATE_H

以上为状态类代码,O(∩_∩)O~。简单的只有 三个主要调用的函数,进入,执行,离开。

然后我们继续查看下状态机的基类,废话不多说,先上代码,这样新手可以直接拿走直接使用。、

#ifndef BASESTATEMACHINE_H
#define BASESTATEMACHINE_H
//////////////////////////////////////////////////////////////////////////
// 
/// @file	状态机基类
/// @brief	负责状态机的跳转
/// @version 2.0
//////////////////////////////////////////////////////////////////////////
#include "BaseState.h"
#include <assert.h>
//////////////////////////////////////////////////////////////////////////
/// @class BaseStateMachine
/// @brief 状态机基类
///
/// \n本类负责模板状态机的所有处理
template <class entity_type>
class BaseStateMachine
{
private:
	entity_type *m_pOwner;						///<指向拥有这个了实例的智能体的指针

	BaseState<entity_type>	*m_pCurrentState;	///<智能体的当前状态

	BaseState<entity_type>	*m_pPreviousState;	///<智能体的上一个状态

	BaseState<entity_type>	*m_pGlobalState;	///<每次FSM被更新时,这个状态被调用

public:
	BaseStateMachine(entity_type* owner):
		m_pOwner(owner),
		m_pCurrentState(nullptr),
		m_pPreviousState(nullptr),
		m_pGlobalState(nullptr)
	{

	}
	////////////////////////////////////////////////////////////////////
	///@brief 设置当前状态
	///@param [in]s 要设置的状态
	///@return 无返回值
	////////////////////////////////////////////////////////////////////
	void SetCurrentState(BaseState<entity_type> *s)
	{
		m_pCurrentState = s;
	}
	////////////////////////////////////////////////////////////////////
	///@brief 设置全局状态
	///@param [in]s 要设置的状态
	///@return 无返回值
	////////////////////////////////////////////////////////////////////
	void SetGlobalState(BaseState<entity_type> *s)
	{
		m_pGlobalState = s;
	}
	////////////////////////////////////////////////////////////////////
	///@brief 设置前面的状态
	///@param [in]s 要设置的状态
	///@return 无返回值
	////////////////////////////////////////////////////////////////////
	void SetPreviousState(BaseState<entity_type> *s)
	{
		m_pPreviousState = s;
	}
	////////////////////////////////////////////////////////////////////
	///@brief 更新状态
	///
	///@return 无返回值
	////////////////////////////////////////////////////////////////////
	void Update()const
	{
		if (m_pGlobalState)
		{
			m_pGlobalState->Execute(m_pOwner);
		}

		if (m_pCurrentState)
		{
			m_pCurrentState->Execute(m_pOwner);
		}
	}

	////////////////////////////////////////////////////////////////////
	///@brief 改变状态
	///@param [in]s 要设置的状态
	///@return 无返回值
	////////////////////////////////////////////////////////////////////
	void ChangeState(BaseState<entity_type> *pNewState)
	{
		//assert(PNewState && "<BaseStateMachine::ChangeState>:trying to change to a null state");

		///保留前一个状态记录
		m_pPreviousState = m_pCurrentState;
		///调用现有状态的退出方法
		m_pCurrentState->Exit(m_pOwner);
		///改变到一个新状态
		m_pCurrentState= pNewState;
		///调用新状态的进入方法
		m_pCurrentState->Enter(m_pOwner);
	}
	////////////////////////////////////////////////////////////////////
	///@brief 改变到上一状态
	///
	///@return 无返回值
	////////////////////////////////////////////////////////////////////
	void RevertToPreviousState()
	{
		ChangeState(m_pPreviousState);
	}
	////////////////////////////////////////////////////////////////////
	///@brief 查看当前状态
	///
	///@return BaseState<entity_type>*当前状态
	////////////////////////////////////////////////////////////////////
	BaseState<entity_type>* CurrentState() const
	{
		return m_pCurrentState; 
	}

	////////////////////////////////////////////////////////////////////
	///@brief 查看全局状态
	///
	///@return BaseState<entity_type>* 全局状态
	////////////////////////////////////////////////////////////////////
	BaseState<entity_type>* GlobalState() const
	{
		return m_pGlobalState; 
	}
	////////////////////////////////////////////////////////////////////
	///@brief 查看前一状态
	///
	///@return BaseState<entity_type>*前一状态
	////////////////////////////////////////////////////////////////////
	BaseState<entity_type>* PreviousState() const
	{
		return m_pPreviousState; 
	}
	  //class passed as a parameter. 
	bool  isInState(const BaseState<entity_type>& st)const
	{
		return typeid(*m_pCurrentState) == typeid(st);
	}
};


#endif // !BASESTATEMACHINE_H

这个是状态机的基类,使用的时候只需要在每个具体实例中申明一个状态机的类,然后完成自己的状态类的填写,即可完成一个高质量的状态机。注释很全有中文的也有英文的,有兴趣的童鞋可以讨论下这个设计是否合理。


作者:xueyunf 发表于2013-4-25 9:51:53 原文链接
阅读:42 评论:0 查看评论

    
[3]spring集合注入案例
    来源: 互联网  发布时间: 2013-11-19


一个user类

package www.xxxx.spring.dao;

public class User {
 private String name;
 private Integer age;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public Integer getAge() {
  return age;
 }
 public void setAge(Integer age) {
  this.age = age;
 }
 
 
}

CollectionBean类

package www.xxxx.spring.dao;

import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

public class CollectionBean {
 public Set sets;
 //set集合依赖注入
 public void setSets(Set sets) {
  this.sets = sets;
 }
 
 
 public List<User> users;
 //list集合依赖注入
 public void setUsers(List<User> users) {
  this.users = users;
 }
 
 
 public Properties props;
 
 //Properties集合依赖注入
 
 public void setProps(Properties props) {
  this.props = props;
 }


 public Map<Integer,User> map;
 //Map集合依赖注入
 public void setMap(Map<Integer, User> map) {
  this.map = map;
 }
 
 
}

spring-CollectionBean.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd">
 <bean id="collectionBean" class="www.xxxx.spring.dao.CollectionBean" scope="singleton" lazy-init="default">
  <property name="sets">
   <set>
    <value>张三</value>
    <value>李四</value>
    <value>王五</value>
    <value>赵六</value>
    <value>钱八</value>
   </set>
  </property>
   <property name="users">
   <list>
   <ref bean="u1"/>
   <ref bean="u2"/>
   <ref bean="u3"/>
   <ref bean="u4"/>
    
   </list>
   <!-- <array>
   <ref bean="u1"/>
   <ref bean="u2"/>
   <ref bean="u3"/>
   <ref bean="u4"/>
    
   </array> -->
  </property>
  <property name="map">
   <map>
   <entry key="1" value-ref="u1"/>
   <entry key="2">
   <ref bean ="u2"/>
   </entry>
   <entry key="3" value-ref="u3"/>
   </map>
  </property>
  <property name="props">
   <props>
    <prop key="1">jdbc:oracle</prop>
    <prop key="2">jdbc:mysql</prop>
    <prop key="3">jdbc:access</prop>
   </props>
  </property>
 </bean>
<bean id="u1" class="www.xxxx.spring.dao.User">
<property name="name" value="zhang" />
<property name="age" value="22"></property>
</bean>
<bean id="u2" class="www.xxxx.spring.dao.User">
<property name="name" value="zhang" />
<property name="age" value="22"></property>
</bean>
<bean id="u3" class="www.xxxx.spring.dao.User">
<property name="name" value="zhang" />
<property name="age" value="22"></property>
</bean>
<bean id="u4" class="www.xxxx.spring.dao.User">
<property name="name" value="zhang" />
<property name="age" value="22"></property>
</bean>

</beans>
    测试类

 

package www.xxxx.spring.dao;


import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;

 

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestBean {

 @Test
 public void testSets(){
  ApplicationContext context=new ClassPathXmlApplicationContext("classpath:spring-CollectionBean.xml");
  CollectionBean bean = context.getBean("collectionBean",CollectionBean.class);
  //set集合
  Set<String> sets = bean.sets;
  Iterator<String> it = sets.iterator();
  while(it.hasNext()){
  System.out.println(it.next());
  }
  
  System.out.println("----------------------");
  
  //list集合
  List<User> users = bean.users;
  for(User user:users){
   System.out.println(user.getName()+"sss"+user.getAge());
  }
  System.out.println("-----------------------");
  
  //map集合
  Map<Integer,User> map =bean.map;
  //得到map集合的key键值的set集合
  Set<Integer> setkeys= map.keySet();
  //得到key键值set集合的迭代器
  Iterator<Integer> itkeys=setkeys.iterator();
  while(itkeys.hasNext()){
   //得到一个具体的键值
   Integer key=itkeys.next();
   //通过 map集合get方法获取key键值对应的value值
   User user = map.get(key);
   System.out.println(key+"dddddd"+user.getName()+"sss"+user.getAge());
  }
  
  System.out.println("sdfd-----------------");
  //map集合2
  //获取实体对象的set集合
  Set<Entry<Integer, User>> setentry = map.entrySet();
  //获取实体对象的迭代器
  Iterator<Entry<Integer,User>> itentry = setentry.iterator();
  while(itentry.hasNext()){
   Entry<Integer,User> entry = itentry.next();
   //通过
   System.out.println(entry.getKey()+"sssaaa"+entry.getValue().getName()+"sssdd"+entry.getValue().getAge());
  }
  
  System.out.println("=========================");
  
  //Properties集合
  Properties props= bean.props;
  //得到这个结合键值的Key的set集合
  
  Set<String> setprops = props.stringPropertyNames();
  //String 集合迭代
  Iterator<String> keystr = setprops.iterator();
  while(keystr.hasNext()){
   String key = keystr.next();
   System.out.println(key+"ssssssssss"+props.getProperty(key));
  }
  }
 
  
  
  
}

 

 

作者:a2401877437 发表于2013-4-25 9:50:50 原文链接
阅读:41 评论:0 查看评论

    
最新技术文章:
▪主-主数据库系统架构    ▪java.lang.UnsupportedClassVersionError: Bad version number i...    ▪eclipse项目出现红色叉叉解决方案
▪Play!framework 项目部署到Tomcat    ▪dedecms如何做中英文网站?    ▪Spring Batch Framework– introduction chapter(上)
▪第三章 AOP 基于@AspectJ的AOP    ▪基于插件的服务集成方式    ▪Online Coding开发模式 (通过在线配置实现一个表...
▪观察者模式(Observer)    ▪工厂模式 - 程序实现(java)    ▪几种web并行化编程实现
▪机器学习理论与实战(二)决策树    ▪Hibernate(四)——全面解析一对多关联映射    ▪我所理解的设计模式(C++实现)——解释器模...
▪利用规则引擎打造轻量级的面向服务编程模式...    ▪google blink的设计计划: Out-of-Progress iframes    ▪FS SIP呼叫的消息线程和状态机线程
▪XML FREESWITCH APPLICATION 实现    ▪Drupal 实战    ▪Blink: Chromium的新渲染引擎
▪(十四)桥接模式详解(都市异能版)    ▪你不知道的Eclipse用法:使用Allocation tracker跟...    ▪Linux内核-进程
▪你不知道的Eclipse用法:使用Metrics 测量复杂度    ▪IT行业为什么没有进度    ▪Exchange Server 2010/2013三种不同的故障转移
▪第二章 IoC Spring自动扫描和管理Bean    ▪CMMI简介    ▪目标检测(Object Detection)原理与实现(六)
▪值班总结(1)——探讨sql语句的执行机制    ▪第二章 IoC Annotation注入    ▪CentOS 6.4下安装Vagrant
▪Java NIO框架Netty1简单发送接受    ▪漫画研发之八:会吃的孩子有奶吃    ▪比较ASP和ASP.NET
▪SPRING中的CONTEXTLOADERLISTENER    ▪在Nginx下对网站进行密码保护    ▪Hibernate从入门到精通(五)一对一单向关联映...
▪.NET领域驱动设计—初尝(三:穿过迷雾走向光...    ▪linux下的块设备驱动(一)    ▪Modem项目工作总结
▪工作流--JBPM简介及开发环境搭建    ▪工作流--JBPM核心服务及表结构    ▪Eclipse:使用JDepend 进行依赖项检查
▪windows下用putty上传文件到远程Linux方法    ▪iBatis和Hibernate的5点区别    ▪基于学习的Indexing算法
▪设计模式11---设计模式之中介者模式(Mediator...    ▪带你走进EJB--JMS编程模型    ▪从抽象谈起(二):观察者模式与回调
▪设计模式09---设计模式之生成器模式(Builder)也...    ▪svn_resin_持续优化中    ▪Bitmap recycle方法与制作Bitmap的内存缓存
▪Hibernate从入门到精通(四)基本映射    ▪设计模式10---设计模式之原型模式(Prototype)    ▪Dreamer 3.0 支持json、xml、文件上传
▪Eclipse:使用PMD预先检测错误    ▪Jspx.net Framework 5.1 发布    ▪从抽象谈起(一):工厂模式与策略模式
▪Eclipse:使用CheckStyle实施编码标准    ▪【论文阅读】《Chain Replication for Supporting High T...    ▪Struts2 Path_路径问题
▪spring 配置文件详解    ▪Struts2第一个工程helloStruts极其基本配置    ▪Python学习入门基础教程(learning Python)--2 Python简...
▪maven springmvc环境配置    ▪基于SCRUM的金融软件开发项目    ▪software quality assurance 常见问题收录
▪Redis集群明细文档    ▪Dreamer 框架 比Struts2 更加灵活    ▪Maven POM入门
▪git 分支篇-----不断更新中    ▪Oracle非主键自增长    ▪php设计模式——UML类图
▪Matlab,Visio等生成的图片的字体嵌入问题解决...    ▪用Darwin和live555实现的直播框架    ▪学习ORM框架—hibernate(二):由hibernate接口谈...
▪(十)装饰器模式详解(与IO不解的情缘)    ▪无锁编程:最简单例子    ▪【虚拟化实战】网络设计之四Teaming
▪OSGi:生命周期层    ▪Javascript/Jquery——简单定时器    ▪java代码 发送GET、POST请求
▪Entity Framework底层操作封装(3)    ▪HttpClient 发送GET、POST请求    ▪使用spring框架,应用启动时,加载数据
▪Linux下Apache网站目录读写权限的设置    ▪单键模式的C++描述    ▪学习ORM框架—hibernate(一):初识hibernate
 


站内导航:


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

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

浙ICP备11055608号-3