2016-07-06 4 views
1

Моего кода содержит следующие методы чтения/записи для записи данных в базу данныхлучше организовать операции чтения/записи в моем проекте

метод прочитанных как

  1. общественного Byte [] ReadFile (arg1)
  2. общественного Byte [] ReadFile (арг1, арг2)
  3. общественного InputStream ReadFile (арг1, арг2)
  4. общественной MyStream ReadFile (арг1, арг2)
  5. общественного Byte [] ReadFile (arg1, arg2, arg3)

Писать такие методы, как

  1. общественного String [] WriteFile (arg1)
  2. общественного String [] WriteFile (arg1 , arg2)
  3. public MyStream writeFile (arg1, arg2) -> файл записывается из этого выведенного потока
  4. public String [] writeFile (arg1, ar g2, arg3)

Различные классифицированные виды доступа к этим методам для чтения и записи. Просьба предоставить мне лучший способ организовать это лучше.

Я хотел бы иметь централизованную часть, где все мое чтение/запись произойдет.

Кто-то, пожалуйста, помогите мне выбрать подходящий образец для организации этой скважины.

+0

Ваши методы синхронизированы внутри? –

+0

Нет Coderino Javarino, они не являются –

+0

Классы, которые вызывают эти методы, следуют одноэлементному шаблону. Поэтому я думаю, что их не нужно синхронизировать. Я чист? –

ответ

2

Вы можете сделать это следующим образом:

interface DatabaseServices { 
    ... listing all the methods that you want to "combine" 

class DatabaseServicesImpl implements DatabaseServices { 
    ... implementing all those methods 

enum DatabaseServicesProvider implements DatabaseServices { 
    INSTANCE; 
    private final DatabaseServices impl = new DatabaseServicesImpl(... 
    ... forwarding all service calls to the impl object 

выше, имеет преимущество, что он «полностью» блок-проверяемые (если вы просто создать перечисление и поставить его методы, вы нарушаете свою способность тестировать клиентов, которые используют перечисление).

Оттуда вы входите в существующий исходный код и отбрасываете все свои методы, которые в настоящее время получают доступ к вашей базе данных; заменяя их звонками, такими как

DatabaseServices services = DatabaseServicesProvider.INSTANCE; 
... 
services.whatever() 

Где: «Перечислительная часть» как-то необязательна. Но очень часто вы обнаруживаете, что вы хотите, чтобы такие службы, связанные с БД, были центральным органом власти (другими словами: singleton). И перечисления просто обеспечивают хорошее, чистое решение этого «глобального» аспекта. Если вам не нужен центральный экземпляр (что было бы лучше всего в любом случае), просто забудьте об этой части.

+0

Jägermeister Я не понимаю, с частью перечисления кода. Я был бы очень полезен, если бы вы могли объяснить мне немного больше, пожалуйста. –

+0

@ user1391703 См. Мой обновленный ответ. – GhostCat

+0

У меня есть небольшое сомнение. Просьба пояснить мне следующее, чтобы я мог отметить ваш ответ как принятый. В чем преимущество использования перечисления над классом в приведенном выше примере? Чтобы справиться с этими перечисляющими методами, мы должны идти как 'enumName.INSTANCE.methodName() ', тогда как если мы используем класс в приведенном выше примере, мы можем получить доступ к таким методам, как' classObj.methodName() '... какой из них эффективный' class' или 'enum' и почему? –

Смежные вопросы