2013-09-03 4 views
0

나는 TableColumns < T>를 사용하여 Dart에 테이블을 표시하는 기본 클래스 테이블 < T>를 작성하려고합니다. 자바에서는이는 리프 클래스가 보일 것이다 익명 클래스 패턴으로 할 것 같은 단순한 다음다트의 익명 클래스에 대한 대체 패턴

class PartTable extends Table<Part> { 

    // Column 1: Part Number 


    addColumn(new TableColumn<Part>("Part Number") { 

    String get(Part part) { part.getNumber().toString() } 

    void set(Part part, String number) { 
     part.setNumber(number); 
    } 
    }); 

    // Column 2: Part Description 

    addColumn(new TableColumn<Part>("Part Description") { 

    String get(Part part) { part.getDescription().toString() } 

    void set(Part part, String desc) { 
     part.setDescription(desc); 
    } 
    }); 

} 

사람이 잘 위의 자바 익명 클래스 패턴을 대체 할 다트 디자인 패턴을 제안 할 수 있습니까? 기본 개념은 Table 생성자의 익명 클래스에 의해 익명의 TableColumn 클래스 추상 메서드 (예 : get 및 set)가 재정의되어 부분의 특성을 사용하여보기를 재정의하는 것입니다. 따라서 표는 임의의 수의 열을 가질 수 있으며 표 셀의 각 부품 속성에 대한보기 특정 CRUD 동작을 제공합니다.

답변

1

귀하의 질문에 대한 일반적인 대답은 없을 것이라고 생각합니다. 코드에 따라 달라집니다. 모든 익명 클래스에 대한 클래스를 만들거나 API를 리팩터링하여 피할 수 있습니다.

는 예를 들어 샘플 코드는 get/set 정의하는 기능을 사용하기 위해 리팩토링 수 :

typedef String ColumnGetter<T>(T t); 

typedef void ColumnSetter<T>(T t, String s); 

class Column<T> { 
    final String name; 
    final ColumnGetter<T> get; 
    final ColumnSetter<T> set; 
    Column(this.name, this.get, this.set); 
} 

class Table<T> { 
    List<T> _elements; 
    final _columns = []; 
    void addColumn(Column<T> column) => _columns.add(column); 
    void set elements(List<T> elements) { 
    this._elements = elements; 
    // updateDisplay 
    } 
} 
+0

감사, 병 한번 시도해 :

여기
final table = new Table<Part>() ..addColumn(new Column<Part>( "Part Number", (p) => p.number.toString(), (p, s) => p.number = s)) ..addColumn(new Column<Part>( "Part Description", (p) => p.desc.toString(), (p, s) => p.desc = s)); 

는 기본 코드가 될 수 무엇 – JLK