플라이급 패턴

공유를 사용하여 많은 수의 세분화된 개체를 효율적으로 지원합니다.



참가자들


  • 플라이웨이트: 플라이웨이트가 외부 상태를 수신하고 작동할 수 있는 인터페이스를 선언합니다.
  • ConcreteFlyweight: Flyweight 인터페이스를 구현하고 고유한 상태에 대한 스토리지를 추가합니다(있는 경우). ConcreteFlyweight 개체는 공유 가능해야 합니다. 저장하는 모든 상태는 고유해야 합니다. 즉, ConcreteFlyweight 개체의 컨텍스트와 독립적이어야 합니다.
  • UnsharedConcreteFlyweight: 모든 Flyweight 하위 클래스를 공유할 필요는 없습니다. Flyweight 인터페이스는 공유를 가능하게 하지만 강제하지는 않습니다. UnsharedConcreteFlyweight 개체는 Flyweight 개체 구조의 일부 수준에서 ConcreteFlyweight 개체를 자식으로 갖는 것이 일반적입니다(Row 및 Column 클래스에서와 같이).
  • FlyweightFactory: 플라이웨이트 개체를 만들고 관리합니다.
    플라이웨이트가 제대로 공유되는지 확인합니다. 클라이언트가 flyweight를 요청하면 FlyweightFactory는 기존 인스턴스를 자산화하거나 존재하지 않는 경우 인스턴스를 생성합니다.
  • 클라이언트: 플라이급에 대한 참조를 유지합니다. 플라이웨이트의 외부 상태를 계산하거나 저장합니다.

  • 암호




    public class Main {
    
        public static void main(String[] args) {
            int extrinsicstate = 22;
            FlyweightFactory factory = new FlyweightFactory();
            Flyweight fx = factory.getFlyweight("X");
            fx.operation(--extrinsicstate);
            Flyweight fy = factory.getFlyweight("Y");
            fy.operation(--extrinsicstate);
            Flyweight fz = factory.getFlyweight("Z");
            fz.operation(--extrinsicstate);
            UnsharedConcreteFlyweight fu = new UnsharedConcreteFlyweight();
            fu.operation(--extrinsicstate);
        }
    }
    
    public class FlyweightFactory {
        private Hashtable<String, Flyweight> flyweights = new Hashtable<>();
    
        public FlyweightFactory() {
            flyweights.put("X", new ConcreteFlyweight());
            flyweights.put("Y", new ConcreteFlyweight());
            flyweights.put("Z", new ConcreteFlyweight());
        }
    
        public Flyweight getFlyweight(String key) {
            return ((Flyweight) flyweights.get(key));
        }
    }
    
    public interface Flyweight {
        void operation(int extrinsicstate);
    }
    
    public class ConcreteFlyweight implements Flyweight {
    
        @Override
        public void operation(int extrinsicstate) {
            System.out.println("ConcreteFlyweight: " + extrinsicstate);
        }
    }
    
    public class UnsharedConcreteFlyweight implements Flyweight {
    
        @Override
        public void operation(int extrinsicstate) {
            System.out.println("UnsharedConcreteFlyweight: " + extrinsicstate);
        }
    }
    

    산출



    ConcreteFlyweight: 21
    ConcreteFlyweight: 20
    ConcreteFlyweight: 19
    UnsharedConcreteFlyweight: 18
    




    eidherjulian61 / 디자인 패턴








    좋은 웹페이지 즐겨찾기