2013-11-09 2 views
1

В шаблонах проектирования у нас есть Singleton, который обеспечивает только один экземпляр класса.Binaryton - два экземпляра одного объекта

Мне нравятся шаблоны дизайна, поэтому мне было интересно, что делать, если нам нужны только два экземпляра этого класса? Поэтому игнорирование приложения реального мира может иметь или не иметь; как бы вы обеспечили наличие только двух экземпляров одного класса?

У меня есть идея, как это сделать, но мне любопытно, что другие люди придумали, и я не хочу никого отклонять.

Объясните свой ответ. Отображение кода также приветствуется.

Снова вопрос: Как бы вы обеспечили наличие только двух экземпляров одного класса?

EDIT: Это просто для удовольствия, нет, обязательно, приложение для реального мира для этой поддельной картины. Я просто хочу посмотреть, с каким подходом мы можем прийти как группа.

+0

Я не думаю, что вы можете игнорировать, существует ли реальное применение этого «шаблона». Как вы можете получить доступ к этим объектам? Как бы вы решили, какой объект вернуться? –

+1

Вы должны предоставить пользователю своего класса возможность выбрать, какой объект вызывать. В идеале, класс будет обрабатывать себя и предоставлять пользователю объект из двух - это просто мое видение. Это все теоретическое, я не говорю, что выходите туда и используйте это в своем проекте. –

+0

С этим вопросом много проблем. Например, как программист мог выбрать, какой из двух экземпляров он будет использовать? И почему? Ответы на эти вопросы будут много диктовать решение. –

ответ

1

Для ответа, мы можем ссылаться Эффективное Java (второе издание) Пункт 3: «Принудительно одноплодной собственности с частным конструктору или перечислимого типа»

Оба подхода поддерживать любое фиксированное число случаев, при том, что enum кажется идеально подходящим. Например:

public class SimpleLoadBalancer { 
    private static final Random RANDOM = new Random(); 

    public Connection getConnection() { 
     return RANDOM.nextBoolean() ? 
       BinaryConnection.CONNECTION_ONE: 
       BinaryConnection.CONNECTION_TWO; 
    } 

    public interface Connection { 
     void connect(); 
    } 

    private enum BinaryConnection implements Connection { 
     CONNECTION_ONE("connection_string_one"), 
     CONNECTION_TWO("connection_string_two"); 

     private final String connectionString; 
     private BinaryConnection(String con) { 
      connectionString = con; 
     } 

     @Override 
     public void connect() { 
      // some connection logic here 
     } 
    } 
} 
Смежные вопросы