2013-08-06 6 views
8

के साथ पढ़ना सेट करना मैं अपनी कक्षाओं में से एक में जावाएफएक्स ऑब्जेक्टप्रोपर्टी का उपयोग कर रहा हूं। मैं इसे बांध सुविधाओं के लिए उपयोग कर रहा हूँ। मुद्दे यह है कि मैं चाहता हूं कि लोग इसे बांध सकें, लेकिन मूल्य को नहीं बदला। मैं ऐसा करने के लिए जाति के सबूत के बारे में नहीं सोच सकता (जहां लोगों को इसे बाहर से बदलने का कोई तरीका नहीं होगा), लेकिन ऐसा करने का कोई तरीका होना चाहिए।केवल जावाएफएक्स प्रॉपर्टी

उत्तर

8

समाधान

आप ReadOnlyObjectWrapper के लिए देख रहे हैं।

नमूना

यहाँ एक उदाहरण उपयोग एक sample tic tac toe game जो मैंने लिखा से लिया है:

class Square { 

    enum State { EMPTY, NOUGHT, CROSS } 

    private ReadOnlyObjectWrapper<State> state = 
    new ReadOnlyObjectWrapper<>(State.EMPTY); 

    public ReadOnlyObjectProperty<State> stateProperty() { 
    return state.getReadOnlyProperty(); 
    } 

    public State getState() { 
    return state.get(); 
    } 

    public void pressed() { 
    if (!game.isGameOver() && state.get() == State.EMPTY) { 
     state.set(game.getCurrentPlayer()); 
     ... 
    } 
    } 
} 

स्पष्टीकरण

इस वर्ग की स्थिति एक द्वारा प्रतिनिधित्व होने की अनुमति देता एक संपत्ति ताकि स्क्वायर के बाहरी उपयोगकर्ता स्क्वायर के राज्य से जुड़ सकें, फिर भी राज्य स्क्वायर में ही encapsulated है, तो केवल स्क्वायर अपने स्वयं के राज्य को बदल सकता है।

इस पैटर्न के लिए उपयोग का एक उदाहरण स्क्वायरस्किन ऑब्जेक्ट है जिसमें स्क्वायर का प्रतिनिधित्व करने के लिए दृश्य नोड्स शामिल हैं। त्वचा संबंधित वर्ग की राज्य संपत्ति में परिवर्तनों के लिए सुन सकती है और स्क्वायर को उचित रूप से प्रदर्शित करने के लिए उपयोग की जाने वाली छवि को अपडेट कर सकती है।

वास्तव में यह सुनिश्चित करने के लिए कि ReadOnlyWrapper में संलग्न ऑब्जेक्ट वैल्यू को बाहरी रूप से बदला नहीं जा सकता है, उन ऑब्जेक्ट मानों को immutable (उदाहरण के लिए ऑब्जेक्ट्स में कोई सेटटर फ़ंक्शंस नहीं है, केवल गेटर फ़ंक्शन) बनाना सर्वोत्तम है।

और उदाहरण

खेल कोड मैं जुड़ा हुआ विभिन्न बाध्यकारी पैटर्न और उपयोगों के कई अन्य उदाहरण दिए गए हैं (मैं इसे आंशिक रूप से लिखा एक बाध्यकारी व्यायाम के रूप में देखने के लिए अगर आप एक में बाइंडिंग का एक बहुत का उपयोग क्या होगा एप्लिकेशन)।

+0

अहह ... यह पूरी समझ में आता है। ऐसा लगता है कि ऐसा करने का एक तरीका होना था। धन्यवाद। –

संबंधित मुद्दे