1

我有多个不同的对象实现,它们实现了interface我所做的这个自定义,称为Board.

Board包含如下所示的方法

public void ConvertFromString(String formattedString);

每个对象在其构造函数中实现Board调用。ConvertFromString()

看起来像下面这样。

public void BoardImpl1 implements Board
{
    public Board(string B)
    {
        ConvertFromString(b);
    }

    public void ConvertFromString(String formattedString)
    {
        //do some parsing on string and set up the BoardImpl properties
    }
}

ConvertFromString 公开会导致警告,因此我发现的解决方法之一是制作BoardImplfinal。有没有更好的方法来解决这个问题?

4

3 回答 3

2

//对字符串进行一些解析并设置 BoardImpl 属性

该方法应该只负责 convertFromString。

1)使方法最终

public class BoardImpl implements Board{

  public void final convertFromString(String formattedString)
  {
        //do some parsing on string and set up the BoardImpl properties
  }

}

2) 解决方案abstract class在 superClass 构造函数中创建并调用,因此您不必在每个子类中调用但不要使用子类中的属性,因为它们没有被 intilized

public abstract class AbstractBoard implements Board{

     public AbstractBoard(String s){
       convertFromString(s);
     }

}

3)我最喜欢的人用构图制作东西

public class Client {

 private Board board;

  public Client(String s){
   board.convertFromString(s);
  }

 public void setBoard(Board board){
      this.board = board;
 } 

}

然后在董事会中,您可以将决定您应该使用哪个董事会的责任委托给工厂,或者如果工厂没有状态FlyweightFactory

于 2013-07-15T01:41:13.490 回答
1

ConvertFromString真的属于Board界面开头吗?如果您有一个以不同方式初始化其属性的板怎么办?如果可以的话,我会考虑重构板类。

public class Board {
   public Board(Properties properties) {...}
}

我认为您在不调用公共ConvertFromString方法的情况下无法设置它的原因是因为设计有点偏离。ConvertFromString对它的实现做出假设。

于 2013-07-15T01:24:55.223 回答
0
  1. 您的代码中存在编译错误
  2. 我无法使用以下代码收到编译警告

    public interface Board {
    
      public void ConvertFromString(String formattedString);
    
    }
    
    
    public class BoardImpl1 implements Board {
    
      public BoardImpl1(String b) {
    
        ConvertFromString(b);
    
      }
    
      public void ConvertFromString(String formattedString) {
    
        //bla bla
    
      }
    
    }
    
于 2013-07-15T01:45:03.720 回答