java游戏服务器 策略+简单工厂】的更多相关文章

上一篇中我们讲到简单工厂模式有它的弊端,它不好在哪里呢? 我们看到,每次创建场景,我们都需要暴露两个类... 这是比较不好的, 可以通过策略模式+简单工厂模式来稍微改造下 一.先来一个策略模式UML图(大话设计模式) Strategy:所有策略的基类 StrategyA.StrategyB.StrategyC:三个策略子类 Context:上下文,包含一个父类Strategy引用,指向具体的子类策略对象(聚合关系) 二.接下来我们以游戏服务端开发里的生活技能来讲解.这个需求非常适合策略模式. 这…
先来学习下简单工厂模式! 我们知道在游戏里有很多的场景,例如:帮派场景,副本场景,野外场景... 现在我们有这样的需求: 1.我们需要进入帮派场景时---开始执行帮派任务. 2.我们需要进入副本场景时---开始打怪. 3.我们需要进入野外场景时---在河边钓鱼. 思考下,如何设计? 我们注意到,这里帮派.副本.野外...其实都是场景,所以我们可以抽象一个场景类出来.然后,你会发现我们要执行帮派任务.打怪.钓鱼其实都是在进入对应的场景时,开始做的事件,到这里,我们自然可以想到"进入场景"…
又是一个美好的周末啊,现在一到周末,早上就起得晚,下午困了又会睡一两个小时,上班的时候,早上起来喝一杯咖啡,然后就能高效的工作一整天,然而到了周末人就懒散了,哈哈. 最近刚跳槽,到新公司已经干了有两周时间了,这两周时间是过得比较充实的,因为这家新公司是个小公司,以前以单机开发为主,服务器方面我一个人,做两个游戏的服务器开发工作,当然,一个很简单,另一个就相对复杂点,简单的那个是个弱联网游戏,服务器只需要做好数据存档和登录支付验证就好了,而另一个,则是相对复杂的slg游戏,我感觉这是又一款cok,…
一.前言 此游戏服务器架构是一个单服的形式,也就是说所有游戏逻辑在一个工程里,没有区分登陆服务器.战斗服务器.世界服务器等.此架构已成功应用在了多款页游服务器 .在此框架中没有实现相关业务逻辑,只有简单的测试用的注册登陆功能. 服务器工程---GameServer(https://github.com/yongzhidai/GameServer.git) 测试客户端---TestClient,模拟客户端与服务器通信,用于测试服务器功能(https://github.com/yongzhidai/…
简单工厂模式 简单工厂模式是类的创建模式,又叫做静态工厂方法模式.简单工厂模式由一个工厂对象决定生产出哪一种产品类的实例. 为什么要使用简单工厂模式 原因很简单:解耦. A对象如果要调用B对象,最简单的做法就是直接new一个B出来.这么做有一个问题,假如C类和B类实现了同一个接口/继承自同一个类,系统需要把B类修改成C类,程序不得不重写A类代码.如果程序中有100个地方new了B对象,那么就要修改100处. 这就是典型的代码耦合度太高导致的"牵一发动全身".所以,有一个办法就是写一个工…
前言 之前介绍了设计模式的原则和分类等概述.今天开启设计模式的学习,首先要介绍的就是工厂模式,在介绍工厂模式前会先介绍一下简单工厂模式,这样由浅入深来介绍. 简单工厂模式 做法:创建一个工厂(方法或类)用来制造对象. 当一个人想要用手机的时候,需要自己创建手机然后来使用. 如下: public class IphoneX { public IphoneX(){ System.out.println("##### 制造iphoneX #####"); } } public class I…
简单工厂的实现 实现一个计算器:要求输入2个数,和运算符,得到结果 Operation类 package com.pb.demo1; public class Operation { private double num1; private double num2; public double getResult(double num1,double num2){ double result=0; return result; } public double getNum1() { return…
在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 举例说明适用场景: 假设应用系统需要多种登录方式:口令认证(通过数据库验证用户).域认证(通过微软域验证用户).建立一个支持多种登录方式的接口,见下图: 1 public interface Login { 2 //登录验证 3 public boolean verify(…
之前项目有个需求,审批流程的时候要根据配置发送信息:发送短信.发送邮件.当时看到这个就想到要用工厂模式,为什么要用工厂模式呢?用工厂模式进行大型项目的开发,可以很好的进行项目并行开发.就是一个程序员和另一个程序员可以同时去书写代码,而不是一个程序员等到另一个程序员写完以后再去书写代码.其中的粘合剂就是接口和配置文件. 通过简单的工厂设计模式可以达到类的 解耦合目的,但是之前的工厂设计模式依然存在问题,那就是在增加一个子类时都需要修改工厂类,这样很麻烦.现在就可以通过反射机制修改工厂类,这样肯定会…
Program: 请采用采用简单工厂设计模式,为某个汽车销售店设计汽车销售系统,接口car至少有方法print(), 三个汽车类:宝马.奥迪.大众 (属性:品牌,价格),在测试类中根据客户要求购买的汽车品牌, 通过接口car为客户提供相应的汽车对象. Description:通过java反射机制和Properties类的结合使用,实现工厂模式.代码如下: 1.首先是entity包中的一个接口和三个实体类 汽车接口: 1 /* 2 *Description:定义汽车接口 3 * */ 4 5 6…
第一步,定义一个接口类 package factory.face; /** * 接口,为了保证返回的对象可以统一用 Product接受 * @author Administrator */ public interface Product { void show(); } 第二步,写两个继承了以上接口的类 package factory.extend; import factory.face.Product; public class ProductA implements Product{ @…
简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例,简单来说就是,通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 首先举个例子:创建两个类,一个Apple,一个Banana,都有个一方法 public class Apple{ public v…
关于mongo的思考 第一阶段的弱联网游戏已基本完成,截至今天下午,测试也基本差不多了,前端还有一些小bug需要优化,接下来会接入小米,360,百度,腾讯等平台,然后推广一波,年前公司还能赚一笔,而我,也即将准备做下一款SLG.上一次,我第一次尝试了Netty,并且也着实感受到了Nio的魅力,Netty的魅力,在做的过程中也学到了很多有用的东西,这一次,在数据持久化方面,我思考了很久,我越发的觉得,我即将做的这款游戏的数据用nosql来存储更合适,甚至是之前做的那款弱联网游戏的存储,我也认为似乎…
前言 前段时间由于公司的一款弱联网游戏急着上线,没能及时分享,现在基本做的差不多,剩下的就是测试阶段了(本来说元旦来分享一下服务器技术的).公司的这款游戏已经上线一年多了,在我来之前一直都是单机版本,由于人民群众的力量太强大,各种内购破解,刷体力,刷金币,刷钻石版本的出现,公司才决定将这款游戏转型为弱联网游戏,压制百分之八十的破解用户(毕竟原则上还是属于单机游戏,不可能做到百分之百的防破解),招了我这一个服务器来进行后台的开发.什么是弱联网游戏?在这之前我也没有做过弱联网游戏的服务器,但是按照我…
1.创建抽象类User public abstract class User // 抽象类 { public void sameOperation() { System.out.println("修改个人资料!"); } public abstract void diffOperation(); } 2.创建继承类Employee.Manager.Administrator public class Employee extends User { public Employee() {…
Runtime.getRuntime().addShutdownHook(shutdownHook); shutdownHook()函数可以在jvm关闭的时候进行内存清理.对象销毁等操作 http://blog.csdn.net/wgw335363240/article/details/5854402 java的System.getProperty()方法可以获取的值 http://blog.csdn.net/kongqz/article/details/3987198 使用Apache Com…
这里的具体的建造者ConcreteBuilder可以多个 这里我们以建造汽车为例: 假设汽车需要:方向盘.汽车壳.还有四个轮子  ---------这三样才能跑起来 如果你因为粗心漏了其中的某个建造过程(例如:忘了装方向盘),那么汽车就跑不起来. 有什么方法可以避免粗心,漏了其中的某个过程? 代码如下: 1.Builder类 为 AbstractBuilderCar ** * * 抽象建造汽车父类 * @author lizhibiao * @date 2019/1/16 21:34 */pub…
在游戏开发中,我们经常会遇到一些技术难题,而其引发的bug则会影响整个游戏的品质.女性向手游<食物语>就曾遇到过一些开发上的难题,腾讯游戏学院专家团Wade.Zc.Jovi等专家为其提供了指导和帮助.过载保护.集群.服务器通信.并发选型等方面的问题,是中小团队常常的技术难题,本文分享了一些专家在坐诊过程中遇到的游戏服务器常见问题解决方法,希望对大家有所帮助. 问题一:玩家登录时拉取好友信息,但好友服务繁忙导致登录失败. 解决方法: 1.分离关键路径上非关键调用,缩短事务流程,避免周边服务异常阻…
导读 最近在做公司一个消息网关的服务,包括:短信.微信.邮件等,所有请求通过一个入口,方便接口的管理(记录日志.接口限流白名单啥的).如何写这个接口呢,还有为了以后扩展,对接过短信.微信.公众号的童鞋大概都了解,首先定义一个模板,然后后台传入json,替换模板中的值,然后发送.设计框架大概思路是这样的 第一层:通过策略模式,选择出具体的发送类型,比如:短信.微信.邮件..... 第二层:再次通过策略模式,选择出具体的第三方平台,比如短信平台:阿里云.腾讯云.华为云...... 第三层:通过一个简…
策略模式: --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3884781.html "谢谢-- 为什么使用:策略模式主要用于有很多不同的方式来解决同一个问题的情景.如:文件的保存:可保存成txt,也可保存成xml.另外压缩文件.商场的促销策略等是类似的 如何使用:需要定义一个接口或者抽象类来表示各种策略的抽象,由于在选择适当的策略上有些不方便,需要不断地判断需要的类型,因此需要用简单工厂方法来实现判断过程 例子: 用策略模式实现图…
前言    设计模式是软件工程中一些问题的统一解决方案的模型,它的出现是为了解决一些普遍存在的,却不能被语言特性直接解决的问题,随着软件工程的发展,设计模式也会不断的进行更新,本文介绍的是经典设计模式-简单工厂模式以及来自java8的lambda的对它的优化. 什么是简单工厂模式 概念 定义一个工厂类,对实现了同一接口的一些类进行实例的创建.简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例 简单理解   我的理解是工厂模式好比一…
面向对象设计的基本原则 单一职责系统中的每一个对象应该只有一个单独的职责,所有对象关注的应该是自身职责的完成. 基本思想:高内聚,低耦合. 开闭原则一个对象对扩展开放,对修改关闭.基本思想:对类的改动是通过增加代码进行的,而不是修改现有的代码. 里氏替换原则在任意父类出现的地方,都可以使用子类来替代. 依赖注入原则要依赖于抽象,不要依赖于具体的实现.基本思想:在开发中尽量的面向接口编程. 接口分离原则不要去使用一些不需要使用的功能.基本思想:一个接口不要提供太多的行为. 迪米特原则一个对象对其他…
/** * 接口应用 */ public class Main { public static void main(String[] args) { Person p = new Person("fish7"); p.setIsay(new BeforeGong()); p.say(); p.setIsay(new AfterGong()); p.say(); } } class Person{ //只有在运行期才和say行为关联起来,这就叫面向接口编程 private String…
策略模式是有客户端自行实例化算法类的,而简单工厂模客户端只传参数,不关心对象的生成. 结合两种模式,可以在使用策略模式的时候客户端不再生成算法的对象.修改策略模式的配置类即可. 在之前策略模式基础上,修改如下 <?php /* * 策略模式:定义一系列算法,并且把每一个算法封装起来,并且使它们可以相互替换 * 策略模式使得算法可以独立于使用它的客户而变化 */ //抽象策略接口,完成某件事情 interface category{ public function dosomething(); }…
java nio手动实现简单的http服务器  需求分析 最近在学习HTTP协议,还是希望动手去做一做,所以就自己实现了一个http服务器,主要功能是将http请求封装httpRequest,通过解析web.xml,用不同的handler处理不同的uri,然后再将封装好的httpResponse还原成http响应返回浏览器. 代码 使用java nio实现监听,完成服务器监听线程 package com.cszjo.com.http.server; import java.io.ByteArra…
摘要:本文介绍了简单工厂模式的概念,优缺点,实现方式,以及结合Annotation和反射的改良方案(让简单工厂模式不简单).同时介绍了简单工厂模式(未)遵循的OOP原则.最后给出了简单工厂模式在JDBC中的应用 原创文章.同步自作者个人博客http://www.jasongj.com/design_pattern/simple_factory 简单工厂模式使用案例 有一种抽象产品--汽车(Car),同时有多种具体的子类产品,如BenzCar,BMWCar,LandRoverCar.类图如下 作为…
前言 一个简单的Java web服务器实现,比较简单,基于java.net.Socket和java.net.ServerSocket实现: 程序执行步骤 创建一个ServerSocket对象: 调用ServerSocket对象的accept方法,等待连接,连接成功会返回一个Socket对象,否则一直阻塞等待: 从Socket对象中获取InputStream和OutputStream字节流,这两个流分别对应request请求和response响应: 处理请求:读取InputStream字节流信息,…
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factory):不利于产生系列产品:2)工厂方法模式(Factory Method):又称为多形性工厂:3)抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族,但不利于产生新的产品:             这三种模式从上到下逐步抽象,并且更具一般性.             GOF在<设…
举两个例子以快速明白Java中的简单工厂模式: 女娲抟土造人话说:“天地开辟,未有人民,女娲抟土为人.”女娲需要用土造出一个个的人,但在女娲造出人之前,人的概念只存在于女娲的思想里面.女娲造人,这就是简单工厂模式的应用. 首先,在这个造人的思想里面,有几个重要的角色:女娲本身.抽象的人的概念和女娲所造出的一个个具体的人. 1.)女娲是一个工厂类,也就是简单工厂模式的核心角色. 2.)具休的一个个的人,包括张三,李四等.这些人便是简单工厂模式里面的具体产品角色 3.)抽象的人是最早只存在于女娲的头…
简单工厂将业务逻辑部分和界面逻辑部分分离开来,降低了界面逻辑和业务逻辑的耦合度,符合面向对象迪米特法则.下面以一个加法减法运算器为例,各位读者可以自行按照这种设计方式设计出一个小小的运算器. 1.业务逻辑 1.1.父类Operation package com.designmode.simplefactory; public abstract class Operation { protected int numberA; protected int numberB; public void s…