NBA之享元模式

139 阅读1分钟

Design Pattern:

Flyweight pattern is primarily used to reduce the number of objects created and to decrease memory footprint and increase performance

模式:享元模式是用来减少对象产生的,内置hashmap,如果有就返回没有就new 有效地支持大量细粒度的对象 和单例模式(一个类一个对象)不一样

和工厂模式很像:但是本质上工厂模式是用来掩饰内部实现细节的,而享元是为了防止共享大量的细粒度对象

故事场景:总决赛开始,勇士要在勇士篮球场和骑士篮球场分别打上几场球 但是又不用每个人都new一个篮球场

篮球场
  public class BasketballCourt {
  
      public String place;
  
      public BasketballCourt(String place) {
          this.place = place;
      }
  
      public String getPlace() {
          return place;
      }
  
      public void setPlace(String place) {
          this.place = place;
      }
  }
篮球场工厂,用来生产勇士篮球馆,骑士篮球馆
  public class CourtFactory {
  
      private static Map<String, BasketballCourt> courtMap = new HashMap<>();
  
      public static BasketballCourt getCourt(String court) {
  
          BasketballCourt court0 = courtMap.get(court);
          if (court0 != null) {
              return court0;
          }
          BasketballCourt wCourt = new BasketballCourt(court);
          courtMap.put(court, wCourt);
          System.out.println(court+"建了一个新篮球场");
          return wCourt;
      }
  }
实验的开始
  public class FlyweightDemo {
  
  
      public static void main(String[] args) {
          String warriors = "Warriors";
          //杜兰特需要勇士球馆打球
          CourtFactory.getCourt(warriors);
          //杜兰特需要勇士球馆打球
          CourtFactory.getCourt(warriors);
  
          String cavaliers = "Cavaliers";
          //杜兰特需要骑士球馆打球
          CourtFactory.getCourt(cavaliers);
          //杜兰特需要骑士球馆打球
          CourtFactory.getCourt(cavaliers);
      }
  }


结果