java游戏服务器 策略+简单工厂


- Strategy:所有策略的基类
- StrategyA、StrategyB、StrategyC:三个策略子类
- Context:上下文,包含一个父类Strategy引用,指向具体的子类策略对象(聚合关系)
LifeSkillContext2
/**
* 生活技能策略基类
* 基类,所以是抽象类,方便子类去不同的实现
* @author lizhibiao
* @date 2019/1/10 21:18
*/
public abstract class AbstractLifeSkillLogic
/**
* 采集抽象类
* 这里是抽象类,是因为采集包括采矿、采药。。。
* 方便子类覆写
* @author lizhibiao
* @date 2019/1/10 21:30
*/
public abstract class AbstractAbilityCollectLogic extends AbstractLifeSkillLogic
/**
*
* 合成类
* 这里把合成类,也定义为抽象类是因为合成类包括(烹饪、铸造...)
* 方便子类覆写
* @author lizhibiao
* @date 2019/1/10 21:23
*/
public abstract class AbstractAbilityComposeLogic extends AbstractLifeSkillLogic
/**
* 采矿
* 继承采集抽象类
* @author lizhibiao
* @date 2019/1/11 14:26
*/
public class AbilityMining extends AbstractAbilityCollectLogic
/**
* 采药
* 继承采集抽象类
* @author lizhibiao
* @date 2019/1/11 14:30
*/
public class AbilityHerbs extends AbstractAbilityCollectLogic
/**
*
* 烹饪
* 继承合成抽象类
* @author lizhibiao
* @date 2019/1/11 14:37
*/
public class AbilityCooking extends AbstractAbilityComposeLogic
/**
* 铸造类
* 继承合成抽象类
* @author lizhibiao
* @date 2019/1/11 14:43
*/
public class AbilityCasting extends AbstractAbilityComposeLogic
/**
*
* 生活技能上下文2
* @author lizhibiao
* @date 2019/1/11 15:23
*/
public class LifeSkillContext2
{
private AbstractLifeSkillLogic abstractLifeSkillLogic = null;
public LifeSkillContext2(LifeSkillTypeEnum typeEnum)
{
switch (typeEnum)
{
case MINING:
abstractLifeSkillLogic = new AbilityMining();
break;
case HERBS:
abstractLifeSkillLogic = new AbilityHerbs();
break;
case COOKING:
abstractLifeSkillLogic = new AbilityCooking();
break;
case CASTING:
abstractLifeSkillLogic = new AbilityCasting();
break;
default:
break;
}
}
public AbstractLifeSkillLogic getAbstractLifeSkillLogic()
{
return abstractLifeSkillLogic;
}
}
/**
* 生活技能策略基类
* 基类,所以是抽象类,方便子类去不同的实现
* @author lizhibiao
* @date 2019/1/10 21:18
*/
public abstract class AbstractLifeSkillLogic
{
/**
* 使用生活技能操作
* 抽象方法
*/
public abstract void lifeSkillOperate();
}
/**
* 采集抽象类
* 这里是抽象类,是因为采集包括采矿、采药。。。
* 方便子类覆写
* @author lizhibiao
* @date 2019/1/10 21:30
*/
public abstract class AbstractAbilityCollectLogic extends AbstractLifeSkillLogic
{
@Override
public void lifeSkillOperate()
{
System.out.println("执行采集共有操作------操起镰刀,动手");
}
}
/**
*
* 合成类
* 这里把合成类,也定义为抽象类是因为合成类包括(烹饪、铸造...)
* 方便子类覆写
* @author lizhibiao
* @date 2019/1/10 21:23
*/
public abstract class AbstractAbilityComposeLogic extends AbstractLifeSkillLogic
{
@Override
public void lifeSkillOperate()
{
System.out.println("执行合成公有操作----------烹饪和铸造先点火。。。");
}
}
/**
* 采矿
* 继承采集抽象类
* @author lizhibiao
* @date 2019/1/11 14:26
*/
public class AbilityMining extends AbstractAbilityCollectLogic
{
@Override
public void lifeSkillOperate()
{
super.lifeSkillOperate();
System.out.println("我是采矿--------采矿。。采矿。。。");
}
}
/**
* 采药
* 继承采集抽象类
* @author lizhibiao
* @date 2019/1/11 14:30
*/
public class AbilityHerbs extends AbstractAbilityCollectLogic
{
@Override
public void lifeSkillOperate()
{
super.lifeSkillOperate();
System.out.println("我是采药-------采药。。采药。。");
}
}
/**
*
* 烹饪
* 继承合成抽象类
* @author lizhibiao
* @date 2019/1/11 14:37
*/
public class AbilityCooking extends AbstractAbilityComposeLogic
{
@Override
public void lifeSkillOperate()
{
super.lifeSkillOperate();
System.out.println("我是烹饪----烹饪。。烹饪。。");
}
}
/**
* 铸造类
* 继承合成抽象类
* @author lizhibiao
* @date 2019/1/11 14:43
*/
public class AbilityCasting extends AbstractAbilityComposeLogic
{
@Override
public void lifeSkillOperate()
{
super.lifeSkillOperate();
System.out.println("我是铸造----铸造。。铸造。。");
}
}
/**
* 生活技能枚举类
* @author lizhibiao
* @date 2019/1/11 14:52
*/
public enum LifeSkillTypeEnum
{
/**
* 采矿
*/
MINING,
/**
* 采药
*/
HERBS,
/**
* 烹饪
*/
COOKING,
/**
* 铸造
*/
CASTING
}
//采矿 注意这里只暴露一个LifeSkillContext2类
LifeSkillContext2 context = new LifeSkillContext2(LifeSkillTypeEnum.MINING);
AbstractLifeSkillLogic mining = context.getAbstractLifeSkillLogic();
if (null != mining)
{
mining.lifeSkillOperate();
}
System.out.println();
//烹饪 注意这里只暴露一个LifeSkillContext2类
LifeSkillContext2 context2 = new LifeSkillContext2(LifeSkillTypeEnum.COOKING);
AbstractLifeSkillLogic cooking = context2.getAbstractLifeSkillLogic();
if (null != cooking)
{
cooking.lifeSkillOperate();
}

**
*
* 生活技能上下文
* @author lizhibiao
* @date 2019/1/10 21:08
*/
public class LifeSkillContext
{
private static AbstractLifeSkillLogic abstractLifeSkillLogic = null;
public static int setLifeSkillLogic(LifeSkillTypeEnum typeEnum)
{
//先置null
abstractLifeSkillLogic = null;
switch (typeEnum)
{
case MINING:
abstractLifeSkillLogic = new AbilityMining();
return 0;
case HERBS:
abstractLifeSkillLogic = new AbilityHerbs();
return 0;
case COOKING:
abstractLifeSkillLogic = new AbilityCooking();
return 0;
case CASTING:
abstractLifeSkillLogic = new AbilityCasting();
return 0;
default:
return -1;
}
}
public static AbstractLifeSkillLogic getLifeSkillLogic()
{
return abstractLifeSkillLogic;
}
}
/**
* 测试类
* @author lizhibiao
* @date 2019/1/11 15:05
*/
public class Main
{
private static final int SUCESSED = 0;
public static void main(String[] args)
{
//采矿
int result = LifeSkillContext.setLifeSkillLogic(LifeSkillTypeEnum.MINING);
if (result == SUCESSED)
{
LifeSkillContext.getLifeSkillLogic().lifeSkillOperate();
}
System.out.println();
//烹饪
result = LifeSkillContext.setLifeSkillLogic(LifeSkillTypeEnum.COOKING);
if (result == SUCESSED)
{
LifeSkillContext.getLifeSkillLogic().lifeSkillOperate();
}
}
}

java游戏服务器 策略+简单工厂的更多相关文章
- java游戏服务器--简单工厂模式
先来学习下简单工厂模式! 我们知道在游戏里有很多的场景,例如:帮派场景,副本场景,野外场景... 现在我们有这样的需求: 1.我们需要进入帮派场景时---开始执行帮派任务. 2.我们需要进入副本场景时 ...
- Java游戏服务器成长之路——感悟篇
又是一个美好的周末啊,现在一到周末,早上就起得晚,下午困了又会睡一两个小时,上班的时候,早上起来喝一杯咖啡,然后就能高效的工作一整天,然而到了周末人就懒散了,哈哈. 最近刚跳槽,到新公司已经干了有两周 ...
- Java游戏服务器搭建
一.前言 此游戏服务器架构是一个单服的形式,也就是说所有游戏逻辑在一个工程里,没有区分登陆服务器.战斗服务器.世界服务器等.此架构已成功应用在了多款页游服务器 .在此框架中没有实现相关业务逻辑,只有简 ...
- Java设计模式2:简单工厂模式
简单工厂模式 简单工厂模式是类的创建模式,又叫做静态工厂方法模式.简单工厂模式由一个工厂对象决定生产出哪一种产品类的实例. 为什么要使用简单工厂模式 原因很简单:解耦. A对象如果要调用B对象,最简单 ...
- Java设计模式学习记录-简单工厂模式、工厂方法模式
前言 之前介绍了设计模式的原则和分类等概述.今天开启设计模式的学习,首先要介绍的就是工厂模式,在介绍工厂模式前会先介绍一下简单工厂模式,这样由浅入深来介绍. 简单工厂模式 做法:创建一个工厂(方法或类 ...
- Java从零开始学十七(简单工厂)
简单工厂的实现 实现一个计算器:要求输入2个数,和运算符,得到结果 Operation类 package com.pb.demo1; public class Operation { private ...
- JAVA基础——设计模式之简单工厂模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂 ...
- 利用Java反射机制优化简单工厂设计模式
之前项目有个需求,审批流程的时候要根据配置发送信息:发送短信.发送邮件.当时看到这个就想到要用工厂模式,为什么要用工厂模式呢?用工厂模式进行大型项目的开发,可以很好的进行项目并行开发.就是一个程序员和 ...
- Java实验项目三——简单工厂模式
Program: 请采用采用简单工厂设计模式,为某个汽车销售店设计汽车销售系统,接口car至少有方法print(), 三个汽车类:宝马.奥迪.大众 (属性:品牌,价格),在测试类中根据客户要求购买的汽 ...
随机推荐
- K8S网络模型
一.网络模型概述 k8s的网络中主要存在四种类型的通信:同一pod内的容器间通信.各pod彼此之间的通信.pod与service间的通信.以及集群外部的流量同service之间的通信. k8s为pod ...
- cmd 端口占用
netstat -ano|findstr 1080 taskkill /pid 3188 /f
- Redis——SpringBoot项目使用Lettuce和Jedis接入Redis集群
Jedis连接Redis: 非线程安全 如果是多线程环境下共用一个Jedis连接池,会产生线程安全问题,可以通过创建多个Jedis实例来解决,但是创建许多socket会影响性能,因此好一点的方法是使用 ...
- vue项目搭建步骤以及一些安装依赖包
一. vue-cli初始化1. 全局安装 vue-clinpm install --global vue-cli2. 创建一个基于 webpack 模板的新项目vue init webpack my- ...
- 使用es6新增Set函数快速数组去重
使用new Set()快速数组去重: let arr = [1, 2, 2, 3, 4, 5, 5, 5, 6] let set = new Set([...arr]) console.log([.. ...
- OpenCV笔记(6)(harris角点检测、背景建模)
一.Harris角点 如上图所示,红色框AB都是平面,蓝色框CD都是边缘,而绿色框EF就是角点. 平面:框往X或Y抽移动,变化都很小. 边缘:框沿X或Y轴移动,其中一个变化很小,而另外一个变化比较大. ...
- 计算机网络(九),HTTP简介
目录 1.超文本传输协议HTTP的主要特点 2.HTTP请求结构 3.HTTP响应结构 4.http请求/响应的步骤 九.HTTP简介 1.超文本传输协议HTTP的主要特点 (1)支持客户/服务器模式 ...
- 字符串之format整理
format 用法 本文根据官方文档及自己理解整理,只整理出自己可以理解的部分,h因个人水平有限,难免有所错误和纰漏,欢迎批评指正. 格式{ [field_name] ["!" c ...
- TTTTTTTTTTTTTTT poj 2932 Coneology 平面扫描+STL
题目链接 题意:有n个圆,圆之间不存在相交关系,求有几个不被其他任何圆包含的圆,并输出圆的编号: #include <iostream> #include <cstdio> # ...
- [HG]走夜路 题解
前言 整个机房就我一个人在想动态规划. 想了半天发现一堆性质,结果由于DP中出现折线挂了. 题目描述 某NOIP普及组原题加强版. \(Jim\) 非常怕黑,他有一个手电筒,设手电筒的电量上限为 \( ...