• Flyweight 享元模式


     

     

    注:享元模式是结构型设计模式,避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类).

     

    很多细粒度对象,只用部分状态不同,大部分是相同的。为了减少内存开销,我们可以利用享元模式,通过一个对象来代替多个对象,实现需求。

     

    享元模式中有个很经典的例子,字母的享元使用。

     

    Java简单代码实现

    字母类

     

    package com.pattern.structure.flyweight;
    
     
    
    public class Letter {
    
     
    
    private String color ;
    
     
    
    private String name ;
    
     
    
    public String getColor() {
    
    return color;
    
    }
    
     
    
    public void setColor(String color) {
    
    this.color = color;
    
    }
    
     
    
    public String getName() {
    
    return name;
    
    }
    
     
    
    public void setName(String name) {
    
    this.name = name;
    
    }
    
     
    
    public void display() {
    
    System.out.println(color + "  " + name);
    
    }
    
    }

     

     

    字母工厂类

     

    package com.pattern.structure.flyweight;
    
     
    
    import java.util.HashMap;
    
    import java.util.Map;
    
     
    
     
    
    public class LetterFactory {
    
     
    
    private static Map<String, Letter> letterMap = new HashMap<>() ;
    
     
    
    public static Letter getRedLetter(String letterName) {
    
     
    
    Letter letter = getLetter(letterName) ;
    
    letter.setColor("red");
    
     
    
    return letter ;
    
    }
    
     
    
    public static Letter getBlackLetter(String letterName) {
    
     
    
    Letter letter = getLetter(letterName) ;
    
    letter.setColor("black");
    
     
    
    return letter ;
    
    }
    
     
    
    public static Letter getLetter(String letterName) {
    
     
    
    Letter letter = null ;
    
    if(letterMap.containsKey(letterName) ) {
    
    letter = letterMap.get(letterName) ;
    
    } else {
    
    letter = new Letter() ;
    
    letter.setName(letterName); 
    
    letterMap.put(letterName, letter) ;
    
    }
    
     
    
    return letter ;
    
    }
    
     
    
    public static int getObjectSize() {
    
     
    
    return letterMap.size() ;
    
    }
    
    }

     

     

    客户端类

     

    package com.pattern.structure.flyweight;
    
     
    
    public class Client {
    
     
    
     
    
    public static void main(String[] args) {
    
     
    
    Letter aRed = LetterFactory.getRedLetter("a") ;
    
    aRed.display(); 
    
     
    
    Letter bRed = LetterFactory.getRedLetter("b") ;
    
    bRed.display(); 
    
     
    
    Letter aBlack = LetterFactory.getBlackLetter("a") ;
    
    aBlack.display(); 
    
     
    
    Letter bBlack = LetterFactory.getBlackLetter("b") ;
    
    bBlack.display(); 
    
     
    
    System.out.println("object size: " + LetterFactory.getObjectSize());
    
    }
    
    }

     

     

     

    运行客户端程序可以看出,我们使用了4个对象,实际只创建了两个对象,如果颜色多种,效果更明显。

     

     

    享元模式通用类图

     

     

     

     

     

    ------

      文章只为技术交流学习,若所写有误,请斧正,评论或消息与我,为不误导后来学习的人;若有不小心所写侵权,请告知我;若转载,请注明出处。

     

     

     

     

  • 相关阅读:
    Html5响应式设计与实现广场
    hdu 4911 Inversion
    LAN远程重启server安全方法
    华丽的网上突出代码组件CodeMirror
    Edit Distance -- LeetCode
    FPGA合成编码
    SenchaTouch2.3.1 正在使用listpaging以及pullrefresh插入 分页演示样品做
    【白云观导引头】一首诗
    初步boost之pool图书馆学习笔记
    分段的作用
  • 原文地址:https://www.cnblogs.com/sten/p/3353258.html
Copyright © 2020-2023  润新知