Rumah > Java > javaTutorial > Flyweight

Flyweight

DDD
Lepaskan: 2024-09-18 21:46:09
asal
801 orang telah melayarinya

Flyweight

Salah satu corak struktur bertujuan untuk mengurangkan penggunaan memori dengan berkongsi data sebanyak mungkin dengan objek yang serupa.
Ia amat berguna apabila berurusan dengan sebilangan besar objek yang serupa, di mana mencipta tika baharu untuk setiap objek akan menjadi mahal dari segi penggunaan memori.
konsep utama:
Keadaan intrinsik: Keadaan yang dikongsi antara berbilang objek adalah bebas daripada konteks dan kekal sama merentas objek yang berbeza.
Keadaan ekstrinsik: Keadaan yang unik untuk setiap objek dan diluluskan daripada klien. Keadaan ini boleh berbeza-beza dan tidak disimpan dalam objek Flyweight

Peserta utama:

Flyweight: Antara muka yang objek Flyweight menerima keadaan Ekstrinsik dan menggunakannya.
ConcreteFlyweight: Melaksanakan Flyweight dan menyimpan keadaan intrinsik.
FlyweightFactory: Mengurus objek Flyweight dan memastikan perkongsian antara muka, ia mengembalikan Flyweight sedia ada jika ia sudah wujud.

Pelanggan(seperti kelas Utama): Mengekalkan rujukan kepada Flyweight dan membekalkan keadaan Ekstrinsik apabila ia perlu berinteraksi dengan objek Flyweight.

Mari kita ambil contoh objek Flyweight berwatak
Katakan kita mempunyai editor teks yang perlu menghasilkan sejumlah besar teks. Setiap watak boleh diwakili sebagai objek, tetapi mempunyai objek berasingan untuk setiap watak akan membuang banyak memori. Sebaliknya, kita boleh menggunakan Flyweights untuk berkongsi objek aksara yang mewakili setiap huruf dan menyimpan keadaan ekstrinsik seperti kedudukan atau pemformatan di luar

Berat Terbang

public interface Flyweight {
    public void display(int x, int y);//x, y are the extrinsic state of the Flyweight object
}
Salin selepas log masuk

ConcreteFlyweight

public class CharacterFlyweight implements Flyweight {
    private char ch;
    public CharacterFlyweight(char c){
        this.ch  = c;
    }
    @Override
    public void display(int x ,int y){
        System.out.println("[drawing character: "+this.ch+" at co-ordinates:("+x+","+y+")]");
    }

}
Salin selepas log masuk

FlyweightFactory

public class FlyweightFactory {
    private static HashMap<character> flyweights = new HashMap();
    public static Flyweight getFlyweight(char c){
        Flyweight flyweight = flyweights.getOrDefault(c,null);
        if(null==flyweight){
            flyweight = new CharacterFlyweight(c);
            flyweights.put(c,flyweight);
        }
        return flyweight;
    }
}
</character>
Salin selepas log masuk

Utama

public class Main {
    public static void main(String args[]){
        Flyweight flyweight1 = FlyweightFactory.getFlyweight('a');
        Flyweight flyweight2 = FlyweightFactory.getFlyweight('b');
        Flyweight flyweight3 = FlyweightFactory.getFlyweight('a');// will use the same object that is referenced by flyweight1

        flyweight1.display(1, 2);//'a' displayed at 1,2
        flyweight2.display(3, 4);//'b' displayed at 3,4
        flyweight3.display(5, 7); // 'a'(shared) displayed at 5,7
    }
}

Salin selepas log masuk

Output:

[drawing character: a at co-ordinates:(1,2)]
[drawing character: b at co-ordinates:(3,4)]
[drawing character: a at co-ordinates:(5,7)]
Salin selepas log masuk

Perkara Utama

  • Kecekapan Memori: Mengurangkan penggunaan memori dengan berkongsi objek, terutamanya apabila keadaan intrinsik besar atau terdapat banyak objek.
  • Peningkatan Prestasi: Mengurangkan bilangan objek yang dicipta, ia boleh meningkatkan prestasi aplikasi apabila mengurus objek yang banyak.

Kelemahan
Kekompleksan: Corak boleh menambah kerumitan pada kod, terutamanya dalam mengurus keadaan ekstrinsik dan intrinsik secara berasingan.
Overhead: Jika terdapat sedikit objek untuk dikongsi, corak Flyweight mungkin memperkenalkan kerumitan yang tidak perlu tanpa penjimatan memori yang ketara.

Atas ialah kandungan terperinci Flyweight. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan