zoukankan      html  css  js  c++  java
  • 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个对象,实际只创建了两个对象,如果颜色多种,效果更明显。

     

     

    享元模式通用类图

     

     

     

     

     

    ------

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

     

     

     

     

  • 相关阅读:
    CPU,MPU,MCU,SOC,SOPC联系与差别
    call && jmp 指令
    认识OD的两种断点
    VB逆向
    ASProtect.SKE.2.11 stolen code解密
    破解之寻找OEP[手动脱壳](2)
    破解之寻找OEP[手动脱壳](1)
    破解常用断点设置
    VB断点大全
    API断点大全
  • 原文地址:https://www.cnblogs.com/sten/p/3353258.html
Copyright © 2011-2022 走看看