Проектирование классов в OOPS (JAVA) - PullRequest
0 голосов
/ 20 июня 2020
  1. Есть ли какие-либо способы удалить totalPermutationCount () из интерфейса, потому что единственная цель метода - получить значение permutationCombination из конкретного класса, если есть более конкретный класс или более переменная экземпляра, тогда интерфейс превратится в сгустки и большой.
  2. Есть ли какой-либо другой лучший подход, кроме конструктора, для присвоения значений переменной экземпляра, от которого зависит весь класс.

Обратитесь к тому, как я использовал, и, пожалуйста, помогите мне поправиться.

Интерфейс

interface Word {
  void performPermutation();
  int totalPermutationCount();
}

Реализация интерфейса

class WordImpl implements Word{

//  "word" is to store the word from the user  
private String word;
// "convert" is to convert the word into a char array to perform the logic 
private char[] convert;
// "permutationCombination" is to find the total number of combination that is done 
private int permutationCombination = 0;

// Constructor
public WordImpl(String wordCom){
    setWord(wordCom);
}

//getter setter of word instance variable
public void setWord(String wordCom){
    if(!wordCom.isEmpty() && wordCom.trim().length() > 0){
    word = wordCom;
    }else{
        word = "Default";
    }
    convertToChar();
}

// convert the given word to char array
private void convertToChar(){
    convert = new char[word.length()];
    for(int i = 0 ; i < word.length() ; i++){  
    convert[i] = word.charAt(i);    
} 
}

public int totalPermutationCount(){
    return permutationCombination;
}

// -------------------------------- Below is the Temporary Logic Ignore it  ---------------------------------------------
private void performSwap(char[] list , int from, int to){
    char temp;
    temp = list[from];
    list[from] = list[to];
    list[to] = temp;
}

public void performPermutation(){
    char[] list = convert.clone();
    Set<String> listData = new HashSet<>();
    System.out.println(convert);
    for (int i = 0 ; i < word.length() ; i++){
        for (int j = i + 1 ,  reverse = i - 1 ; j < word.length() || reverse >= 0  ; j++ , reverse--){
            if(j < word.length()){
            performSwap(list,i,j);
            System.out.println(convertToString(list));
            list = convert;
            permutationCombination++;
            }
            if(reverse >= 0 && i != 0){
                performSwap(list,i,reverse);
                 System.out.println(convertToString(list));
                 list = convert;
                 permutationCombination++;
            }
        }
    }
}
 // ----------------------------------------------------------------------------------------
private String convertToString(char[] list){
    String value = "";
    for(int i = 0 ; i < word.length() ; i++){  
    value = value +  list[i];
     }  
    return value;
}}

Основной класс

 public class MyClass {
    public static void main(String args[]) {
    Word wordImplReference = new WordImpl("home");
    wordImplReference.performPermutation();
    System.out.println(wordImplReference.totalPermutationCount());
    }
   }

1 Ответ

0 голосов
/ 20 июня 2020

Ниже может помочь вам с вашими запросами:

  1. если вы удалите метод totalPermutationCount из интерфейса, вы потеряете преимущества абстракции, достигаемой из класса интерфейса. Если вам все еще нужно это сделать, вам нужно будет использовать WordImpl wordImplReference = new WordImpl ("home"); в вашем основном методе.

  2. В этом случае будет лучше назначать через конструктор. Его можно установить с помощью метода Set в вашем классе WordImpl, но метод setWord потребуется добавить в интерфейс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...