小编Rav*_*abu的帖子

何时使用装饰器模式?

我正在研究我的设计模式,我在编码中尚未认真使用的一种模式是装饰模式.

我理解这种模式,但我想知道的是现实世界中一些具体的例子,装饰者模式是最佳/最佳/优雅的解决方案.需要装饰器模式的特定情况非常方便.

谢谢.

design-patterns decorator

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

使用队列的生产者/消费者线程

我想创建一些Producer/Consumer线程应用程序.但我不确定在两者之间实现队列的最佳方法是什么.

所以我有两个想法(两者都可能是完全错误的).我想知道哪个更好,如果它们都吮吸那么什么是实现队列的最佳方式.这主要是我在这些例子中实现的队列,我很关心.我正在扩展一个内部类的Queue类,并且是线程安全的.以下是两个示例,每个示例包含4个类.

主类 -

public class SomeApp
{
    private Consumer consumer;
    private Producer producer;

    public static void main (String args[])
    {
        consumer = new Consumer();
        producer = new Producer();
    }
} 
Run Code Online (Sandbox Code Playgroud)

消费者类 -

public class Consumer implements Runnable
{
    public Consumer()
    {
        Thread consumer = new Thread(this);
        consumer.start();
    }

    public void run()
    {
        while(true)
        {
            //get an object off the queue
            Object object = QueueHandler.dequeue();
            //do some stuff with the object
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

制片人类 -

public class …
Run Code Online (Sandbox Code Playgroud)

java queue multithreading producer-consumer

56
推荐指数
4
解决办法
11万
查看次数

Java等待线程完成

我有一个线程下载数据,我想等到下载完成后再加载数据.有这样做的标准方法吗?

更多信息:

我有一个从URL(序列化POJO)获取数据的Download类.下载是Runnable和Observable.它跟踪下载的字节数和下载大小.我有一个进度条,向用户显示进度.GUI观察下载以更新进度条.

当下载POJO时,我想得到它并转到下一步.每一步都必须等待前一步完成.问题是我想不出一种暂停我的应用程序等待下载线程的方法.下载完成后,我想调用download.getObject(),它将数据作为对象返回.然后我可以投下它并继续进行下一次下载.

我有一个帮助程序类来管理下载的URL并进行所有下载调用.此调用将调用getObject并执行转换.Gui调用helper.getUser().帮助程序启动线程运行,我希望它在完成时"知道",以便它可以返回已转换的对象.

有什么建议/例子吗?我处于这个设计的开始阶段,所以我愿意改变它.

非常感谢你.

更新:

我跟着http://download.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html#get和使用模式来阻止,直到线程完成.代码非常混乱,我不喜欢这种方法.我将继续尝试找到一种"干净"的方式来处理下载过程的工作流程.

java swing multithreading download wait

56
推荐指数
6
解决办法
16万
查看次数

Java中的修饰符关键字顺序

每当我用Java编写带有更多关键字的方法时public void,每次我用另一种方式编写它.有时" static public void"有时" public static void"等.

这些关键字的最佳订单(最佳做法)是什么?

[ abstract/static] [ final] [ synchronized] [ public/private/protected] [ result_type] ???

java syntax coding-style access-modifiers

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

策略模式V/S装饰模式

我刚遇到两种模式.

  1. 战略模式

  2. 装饰

策略模式: -

策略模式提供了几种可用于执行特定操作或任务的算法.

装饰图案: -

装饰器模式为组件添加了一些功能.

事实上,我发现策略模式和装饰模式也可以互换使用.

这是链接: - 何时以及如何应用策略模式而不是装饰模式?

Strategy Pattern和Decorator Pattern有什么区别?

什么时候应该使用策略模式,何时应该使用Decorator模式?

用同一个例子解释两者之间的区别.

design-patterns decorator strategy-pattern

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

在Object类中放置wait(),notify()方法的概念

我只是很难有时间去了解背后把概念wait()Object类.为了这个问题,请考虑是否wait()notifyAll()Thread课堂上.

class Reader extends Thread {
    Calculator c;
    public Reader(Calculator calc) {
        c = calc;
    }

    public void run() {
        synchronized(c) {                              //line 9
        try {
            System.out.println("Waiting for calculation...");
            c.wait();
        } catch (InterruptedException e) {}
            System.out.println("Total is: " + c.total);
        }
    }

    public static void main(String [] args) {
        Calculator calculator = new Calculator();
        new Reader(calculator).start();
        new Reader(calculator).start();
        new Reader(calculator).start();
        calculator.start();
    }
}

class Calculator extends Thread {
    int total; …
Run Code Online (Sandbox Code Playgroud)

java multithreading notify wait

44
推荐指数
4
解决办法
9万
查看次数

这是Factory Method创建模式吗?

我一直在使用工厂方法创建模式一段时间.我刚刚被告知这个:

public static class ScheduleTypeFactory
{
    public static IScheduleItem GetScheduleItem(ScheduleTypeEnum scheduleType)
    {
        IScheduleItem scheduleItem = null;

        switch (scheduleType)
        {
            case ScheduleTypeEnum.CableOnDemandScheduleTypeID:
                {
                    scheduleItem = new VODScheduleItem();
                    break;
                }
            case ScheduleTypeEnum.BroadbandScheduleTypeID:
                {
                    scheduleItem = new VODScheduleItem();
                    break;
                }
            case ScheduleTypeEnum.LinearCableScheduleTypeID:
                {
                    scheduleItem = new LinearScheduleItem();
                    break;
                }
            case ScheduleTypeEnum.MobileLinearScheduleTypeID:
                {
                    scheduleItem = new LinearScheduleItem();
                    break;
                }
        }

        return scheduleItem;
    }
}
Run Code Online (Sandbox Code Playgroud)

不是我的"技术"主管的工厂方法创建模式,而没有告诉我为什么或给我她的解释.我很友好地要求解释,她告诉我她没有时间.我被告知要重命名它.如果我错了,那么毫无疑问我会接受我已经错误地实施了多年.这是你如何实现工厂方法创建模式?提前致谢.

c# design-patterns creation factory-pattern static-factory

43
推荐指数
8
解决办法
3667
查看次数

什么时候应该使用接口?

我知道一个接口没有一个正文只是一个方法定义.但什么时候应该使用接口?如果我向某人提供一组没有正文的接口,为什么他们觉得需要编写函数体?他们最好用抽象方法编写自己的抽象类.

编辑:

我想当你是一个团队的一员时,使用Interfaces会更多.假设A队为某事写了一个代码,他们想看看是否调用了一个方法.使用名称getRecords(),是否完成.这将帮助B队编写提供给他们的界面的主体,B队必须保持方法名称相似,以便A队的代码运行.

只是一个想法.我可能错了.我认为Interfaces对单个开发人员没用.

编辑:

谢谢大家的答案.有了你们所回复的内容,我认为当你制作像API这样的东西时,接口有更多的用处?

oop interface

42
推荐指数
6
解决办法
4万
查看次数

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

为什么HBase比使用Hadoop的Cassandra更好?

为什么使用HBase比使用一个更好的选择CassandraHadoop

任何人都可以对此进行详细解释吗?

谢谢

hadoop hbase cassandra nosql cap-theorem

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