我正在设计一个简单的聊天应用程序(只是为了它的一脚).我一直想知道这个聊天应用程序的简单设计.为了给你概述..这里是规则:
而已!(见我告诉过你这是一个简单的聊天应用程序).所以,我的意图并不是真正的应用; 但其中使用的设计模式和对象.
现在我就是这样设计的.(我在java编码..如果真的很重要)
好吧..所以现在我已经通过使ChatWindow实现"ChatListener"模式实现了观察者模式,该模式具有称为"通知(消息)"的方法.所以ChatSession会通知每个注册的ChatWindow.
现在这里有一些我想澄清/想要你的意见的事情.1.我还需要为所有聊天窗口取消注册方法,以防聊天窗口关闭并且不想再收到任何通知.这可能意味着,要么我应该有一个"静态"中央注册管理器,它只有一个实例,然后任何聊天窗口应该能够通过提供"聊天会话"ID来取消注册自己.因此,每个聊天会话都应该有一个id.(包括在内).或者我也可以在聊天窗口中维护ChatSession的实例,以便始终准备好实例.(我讨厌单身,因为我认为他们反对哎呀).另一种方法是没有取消注册控制聊天窗口,使用聊天窗口,而窗口关闭的通知应直接进入ChatSession,它应该做什么,应该做什么!
这个设计有意义吗?如果你说这是一个CRAP并给我一个更好的方法; 你一定会非常感谢我.除了观察者模式之外,这里可以使用所有模式来简化它或使其更好.此外..这个设计的任何弱点,如果它是合适的,但可以改进.
此外,当用户在他自己的聊天窗口中键入新消息时; 它需要传播到所有聊天窗口,这是聊天会话所做的,但同时; 这是否意味着..聊天会话需要获得带有"聊天窗口ID"和消息的消息?然后它将它传播到所有窗口,包括作为邮件所有者的窗口?有什么更好的方法来处理这个问题.我的意思是,窗口让聊天会话知道消息,然后聊天会话到所有其他窗口.(我觉得它需要一些,如果......也不喜欢它们)
无论如何......请告诉我你的意见.还请你.工作应用程序不是意图,我正在寻找一个很好的讨论,良好的设计模式实践和用法.
下面的完整代码,如果它给你一个高...随意拆开它并提出几乎任何语义相关的问题.
package com.oo.chat;
public class User {
private Long userId;
private String nickname;
public User(Long userId, String nickname) {
this.userId = userId;
this.nickname = nickname;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public Long getUserId() {
return userId;
}
public …Run Code Online (Sandbox Code Playgroud) 是否可以在不使用typedef的情况下将函数指针作为模板参数传递?
template<class PF>
class STC {
PF old;
PF& ptr;
public:
STC(PF pf, PF& p)
: old(*p), ptr(p)
{
p = pf;
}
~STC() {
ptr = old;
}
};
void foo() {}
void foo2() {}
int main() {
void (*fp)() = foo;
typedef void (*vfpv)();
STC<vfpv> s(foo2, fp); // possible to write this line without using the typedef?
}
Run Code Online (Sandbox Code Playgroud) PHP的ob_start可以被调用一次吗?
对不起,如果这是一个愚蠢的问题,但我真的不知道.
我的网站真的很大(文件数量),它的社交网络和其中一个包含的文件使用ob_start PHP的输出缓冲区的东西,我不是很久以前其他人开始我的网站,现在它是我的我需要更多地了解它正在做什么.
无论如何我想使用ob_start("ob_gzhandler"); 压缩CSS文件和我的网站上的所有文件通过索引文件加载(包含)所以我想知道我是否能够使用它,即使它已经在代码中的其他地方使用?
我想用ffmpeg在php中将视频转换为.flv.目前我有这个工作,但它挂起浏览器,直到文件上传并完成.我一直在查看关于如何在后台运行exec()进程的php文档,同时使用返回的PID更新进程.这是我发现的:
//Run linux command in background and return the PID created by the OS
function run_in_background($Command, $Priority = 0)
{
if($Priority)
$PID = shell_exec("nohup nice -n $Priority $Command > /dev/null & echo $!");
else
$PID = shell_exec("nohup $Command > /dev/null & echo $!");
return($PID);
}
Run Code Online (Sandbox Code Playgroud)
还有一个技巧,我用它来跟踪后台任务是否正在使用返回的PID运行:
//Verifies if a process is running in linux
function is_process_running($PID)
{
exec("ps $PID", $ProcessState);
return(count($ProcessState) >= 2);
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个单独的.php文件,然后从php cli运行以执行其中一个函数?我只需要稍微轻推一下,然后我可以从那里拿走它.
谢谢!
我有一个类似于的接口类:
class IInterface
{
public:
virtual ~IInterface() {}
virtual methodA() = 0;
virtual methodB() = 0;
};
Run Code Online (Sandbox Code Playgroud)
然后我实现了界面:
class AImplementation : public IInterface
{
// etc... implementation here
}
Run Code Online (Sandbox Code Playgroud)
当我在应用程序中使用接口时,最好创建具体类AImplementation的实例.例如.
int main()
{
AImplementation* ai = new AIImplementation();
}
Run Code Online (Sandbox Code Playgroud)
或者最好在接口中放置工厂"创建"成员函数,如下所示:
class IInterface
{
public:
virtual ~IInterface() {}
static std::tr1::shared_ptr<IInterface> create(); // implementation in .cpp
virtual methodA() = 0;
virtual methodB() = 0;
};
Run Code Online (Sandbox Code Playgroud)
然后我就可以在main中使用这样的接口:
int main()
{
std::tr1::shared_ptr<IInterface> test(IInterface::create());
}
Run Code Online (Sandbox Code Playgroud)
第一种选择似乎是常见的做法(不是说它的权利).但是,第二个选项来自"Effective C++".
我想制作日历视图以支持触摸交互.所以我想构建新的自定义日历视图.我试图在视图偏移和实际日期值之间建立映射函数.
这是我的想法:如果我可以计算自基准日期以来的周数(在我的情况下,1989-12-31),很容易知道偏移量.HEIGHT_FOR_WEEK*NUM_OF_WEEK是非常简单的计算,可以知道精确的偏移量.
我的问题是:首先我从基准日期获得毫秒值.我将毫秒设置为另一个日历对象.我期望该对象的日期相同.但实际上它是不同的日期.
mBaseDateInMillis = mBaseDate.getTimeInMillis();
mAnotherDate.setTimeInMillis(mBaseDateInMillis);
/* I expect mBaseDate == mAnotherDate.
* but it was different.
*/
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
public class CalendarCoordinate {
public static final long ONEWEEK_IN_MILLISECONDS = 60 * 60 * 24 * 7 * 1000;
public Calendar mBaseDate = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
public long mBaseDateInMillis = 0;
public Calendar mDate = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
public int mWeekHeight = 30;
/**
* CTOR
*/
public CalendarCoordinate() {
/* Base date is 1989-12-31 0, 0, 0
* It was Sunday …Run Code Online (Sandbox Code Playgroud) 我想知道将对象设置为null是否会清除附加到对象事件的任何事件处理程序...
例如
Button button = new Button();
button.Click += new EventHandler(Button_Click);
button = null;
button = new Button();
button.Click += new EventHandler(Button_Click);
button = null;
Run Code Online (Sandbox Code Playgroud)
等等...
这会导致内存泄漏吗?
如何在代理服务器环境中唯一识别远程机器,我使用了$ _SERVER ['REMOTE_ADDR'],但代理网络中的所有机器都有相同的IP地址,有什么办法
我有一个列出电影的网站.当然人们在搜索电影时会犯拼写错误,当然有些电影有撇号,用字母拼出标题中的数字等等.
如何让我的搜索脚本忽略这些错误?可能需要比智能更聪明的东西WHERE mov_title LIKE '%keyword%'.
有人建议我使用全文搜索引擎,但所有这些看起来都非常复杂,我觉得将它们构建到我的应用程序中就像地狱一样.如果我必须使用一个,哪个是最不具侵入性的,那么在现有代码中实现最无痛苦?