Genel

Flyweight Pattern | Java Design Patterns

Flyweight Pattern | Java Design Patterns ile ilgili derse aşağıdaki adresten ulaşabilirsiniz. Flyweight Design Pattern, yaratımsal bir tasarım desenidir ve büyük miktarda benzer nesnelerin bellek kullanımını azaltmak için kullanılır. Bu desen, paylaşılan nesneleri kullanarak bellek kullanımını optimize eder ve böylece performansı artırır.

Flyweight Design Pattern

Flyweight Design Pattern, yaratımsal bir tasarım desenidir ve büyük miktarda benzer nesnelerin bellek kullanımını azaltmak için kullanılır. Bu desen, paylaşılan nesneleri kullanarak bellek kullanımını optimize eder ve böylece performansı artırır.

Temel Bileşenler

  • Flyweight (Hafif Nesne): Bu, paylaşılan nesnelerin soyut bir sınıfını veya arabirimini tanımlar.
  • Concrete Flyweights (Somut Hafif Nesneler): Bu, Flyweight arabirimini uygular ve paylaşılan nesnelerin somut örneklerini temsil eder.
  • Unshared Flyweights (Paylaşılmayan Hafif Nesneler): Bu, paylaşılamayan nesneleri temsil eder ve her biri özel bir durumu olan nesnelerdir.
  • Flyweight Factory (Hafif Nesne Fabrikası): Bu, paylaşılan nesnelerin örneklerini oluşturur ve yönetir. Bu fabrika, önceden oluşturulmuş nesneleri yeniden kullanır ve yeni nesneleri oluştururken bellek kullanımını optimize eder.

Amaç

Flyweight Design Pattern’in amacı, büyük miktarda benzer nesnelerin bellek kullanımını azaltmak ve performansı artırmaktır. Bu desen, paylaşılan nesnelerin kullanılmasını teşvik eder ve böylece bellek tüketimini optimize eder.

Avantajlar

  • Bellek Kullanımını Azaltma: Flyweight Pattern, büyük miktarda benzer nesnelerin bellek kullanımını azaltır.
  • Performansı Artırma: Paylaşılan nesnelerin kullanılması, uygulamanın performansını artırır.
  • Yeniden Kullanılabilirlik: Paylaşılan nesneler, uygulamanın farklı kısımlarında tekrar kullanılabilir.

Flyweight Design Pattern, büyük miktarda benzer nesnelerin bellek kullanımını azaltarak performansı artırır ve uygulamanın daha verimli çalışmasını sağlar.



public class I implements Piece {

    private String label;

    public I() {
        label = "I";
    }

    @Override
    public void create(String color, int speed, boolean irreversible) {
        System.out.println("Piece is " + label + ", color" + color + ", speed: " + speed + ", irreversible: " + irreversible);
    }
}


public class Main {
    ////metinalniacik.medium.com/flyweight-design-pattern-tasar%C4%B1m-%C3%B6r%C3%BCnt%C3%BCs%C3%BC-3d04eb2d2251 --> Örneğinden kod alınmıştır.
    ////refactoring.guru/design-patterns/flyweight/java/example
    public static void main(String[] args) {

        Piece piece = null;

        for (int i = 1; i < 100000; i++) {

            int a = i % 3;

            if (a == 0) {
                piece = PieceFactory.getPiece("I");
                piece.create("red", i * 3, true);
            } else if (a == 1) {
                piece = PieceFactory.getPiece("T");
                piece.create("green", i * 3, true);
            }
        }
    }
}


interface Piece {

    void create(String color, int speed, boolean irreversible);
}



public class PieceFactory {

    private static final Map<String, Piece> pieceMap = new HashMap();

    public static Piece getPiece(String pieceType) {
        Piece piece = null;

        if (pieceMap.get(pieceType) != null) {
            piece = pieceMap.get(pieceType);
        } else {
            if (pieceType.equalsIgnoreCase("I")) {
                piece = new I();
            } else if (pieceType.equalsIgnoreCase("T")) {
                piece = new T();
            } else{
                System.out.println("Yanlış bir seçim yaptınız..");
            }

            pieceMap.put(pieceType, piece);
        }

        return piece;
    }
}


public class T implements Piece {

    private String label;

    public T() {
        label = "T";
    }

    @Override
    public void create(String color, int speed, boolean irreversible) {
        System.out.println("Piece is " + label + ", color" + color + ", speed: " + speed + ", irreversible: " + irreversible);
    }
}

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir