问题列表 - 第11359页

适用于简单聊天应用程序的设计模式

我正在设计一个简单的聊天应用程序(只是为了它的一脚).我一直想知道这个聊天应用程序的简单设计.为了给你概述..这里是规则:

  1. 匿名用户只使用昵称进入聊天.(用户ID)可能是由系统在后台分配的.
  2. 他们可以加入(订阅)聊天对话.他会看到其他用户的聊天文本出现在指定区域.
  3. 他们可以回复特定的对话,其他人都应该看到.

而已!(见我告诉过你这是一个简单的聊天应用程序).所以,我的意图并不是真正的应用; 但其中使用的设计模式和对象.

现在我就是这样设计的.(我在java编码..如果真的很重要)

  1. 用户对象 - 两个属性id和昵称
  2. 消息对象 - 一个简单的Message接口和实现(现在)作为SimpleMessage,其中String作为包含消息的属性.
  3. 聊天窗口对象 - 基本上是用户和消息的组合.因为它有一个用户对象和消息列表.
  4. 聊天会话 - 再次组成.基本上它会有一个Chat Windows列表.每个聊天窗口都注册到聊天会话.聊天会话负责在出现新消息时通知所有聊天窗口.(观察者模式有人吗?)

好吧..所以现在我已经通过使ChatWindow实现"ChatListener"模式实现了观察者模式,该模式具有称为"通知(消息)"的方法.所以ChatSession会通知每个注册的ChatWindow.

现在这里有一些我想澄清/想要你的意见的事情.1.我还需要为所有聊天窗口取消注册方法,以防聊天窗口关闭并且不想再收到任何通知.这可能意味着,要么我应该有一个"静态"中央注册管理器,它只有一个实例,然后任何聊天窗口应该能够通过提供"聊天会话"ID来取消注册自己.因此,每个聊天会话都应该有一个id.(包括在内).或者我也可以在聊天窗口中维护ChatSession的实例,以便始终准备好实例.(我讨厌单身,因为我认为他们反对哎呀).另一种方法是没有取消注册控制聊天窗口,使用聊天窗口,而窗口关闭的通知应直接进入ChatSession,它应该做什么,应该做什么!

  1. 这个设计有意义吗?如果你说这是一个CRAP并给我一个更好的方法; 你一定会非常感谢我.除了观察者模式之外,这里可以使用所有模式来简化它或使其更好.此外..这个设计的任何弱点,如果它是合适的,但可以改进.

  2. 此外,当用户在他自己的聊天窗口中键入新消息时; 它需要传播到所有聊天窗口,这是聊天会话所做的,但同时; 这是否意味着..聊天会话需要获得带有"聊天窗口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)

java design-patterns

10
推荐指数
2
解决办法
1万
查看次数

函数指针作为模板参数?

是否可以在不使用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)

c++

3
推荐指数
1
解决办法
3923
查看次数

PHP的ob_start可以被调用一次吗?

PHP的ob_start可以被调用一次吗?

对不起,如果这是一个愚蠢的问题,但我真的不知道.

我的网站真的很大(文件数量),它的社交网络和其中一个包含的文件使用ob_start PHP的输出缓冲区的东西,我不是很久以前其他人开始我的网站,现在它是我的我需要更多地了解它正在做什么.

无论如何我想使用ob_start("ob_gzhandler"); 压缩CSS文件和我的网站上的所有文件通过索引文件加载(包含)所以我想知道我是否能够使用它,即使它已经在代码中的其他地方使用?

php

7
推荐指数
1
解决办法
5843
查看次数

在后台运行ffmpeg进程

我想用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运行以执行其中一个函数?我只需要稍微轻推一下,然后我可以从那里拿走它.

谢谢!

php fork background ffmpeg exec

5
推荐指数
1
解决办法
1万
查看次数

使用C++接口的最佳方式

我有一个类似于的接口类:

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++".

c++ interface

6
推荐指数
2
解决办法
7365
查看次数

Android java.util.Calendar - 时差

我想制作日历视图以支持触摸交互.所以我想构建新的自定义日历视图.我试图在视图偏移和实际日期值之间建立映射函数.

这是我的想法:如果我可以计算自基准日期以来的周数(在我的情况下,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)

java datetime android

2
推荐指数
1
解决办法
1万
查看次数

C#显式删除事件处理程序

我想知道将对象设置为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)

等等...

这会导致内存泄漏吗?

c# events garbage-collection memory-leaks

14
推荐指数
3
解决办法
9366
查看次数

如何在PHP中唯一识别远程机器?

如何在代理服务器环境中唯一识别远程机器,我使用了$ _SERVER ['REMOTE_ADDR'],但代理网络中的所有机器都有相同的IP地址,有什么办法

php

5
推荐指数
3
解决办法
2万
查看次数

在php/mysql中搜索拼写错误的最佳方法是什么?

我有一个列出电影的网站.当然人们在搜索电影时会犯拼写错误,当然有些电影有撇号,用字母拼出标题中的数字等等.

如何让我的搜索脚本忽略这些错误?可能需要比智能更聪明的东西WHERE mov_title LIKE '%keyword%'.

有人建议我使用全文搜索引擎,但所有这些看起来都非常复杂,我觉得将它们构建到我的应用程序中就像地狱一样.如果我必须使用一个,哪个是最不具侵入性的,那么在现有代码中实现最无痛苦?

php mysql search full-text-search

7
推荐指数
1
解决办法
3839
查看次数

在Win32 DLL项目中是否存在'AssemblyInfo.cs'的等效项?

我已经看过这个话题,但我需要回答这个问题.如何在Win32 DLL中设置程序集信息属性*?

c++ dll winapi assemblyinfo

5
推荐指数
1
解决办法
5347
查看次数