zoukankan      html  css  js  c++  java
  • 10享元模式Flyweight

    一、什么是享元模式

      Flyweight模式也叫享元模式,是构造型模式之 一,它通过与其他类似对象共享数据来减小内存 占用。

    二、享元模式的结构

    三、享元模式的角色和职责

      抽象享元角色: 所有具体享元类的父类,规定一些需要实现的公共接口。

      具体享元角色:     抽象享元角色的具体实现类,并实现了抽象享元角色规定的方法。

       享元工厂角色:     负责创建和管理享元角色。

    没用享元模式前

     1 //我的性格
     2 public class MyCharacter {
     3     private char mychar;
     4     
     5     public MyCharacter(char mychar) {
     6         this.mychar = mychar;
     7     }
     8     
     9     public void display() {
    10         System.out.println(mychar);
    11     }
    12 }

    我的性格的工厂

     1 import java.util.HashMap;
     2 import java.util.Map;
     3 
     4 //我的性格的工厂
     5 public class MyCharacterFactory {
     6     private Map<Character,MyCharacter> pool;
     7     
     8     public MyCharacterFactory() {
     9         pool = new HashMap<Character,MyCharacter>();
    10     }
    11     
    12     public MyCharacter getMyCharacter(Character character) {
    13         MyCharacter myChar = pool.get(character);
    14         if(myChar == null) {
    15             myChar = new MyCharacter(character);
    16             pool.put(character, myChar);
    17         }
    18         return myChar;
    19     }
    20 }

    测试

     1 public class MainClass {
     2 
     3     public static void main(String[] args) {
     4 //        MyCharacter myChar1 = new MyCharacter('a');
     5 //        MyCharacter myChar2 = new MyCharacter('b');
     6 //        MyCharacter myChar3 = new MyCharacter('a');
     7 //        MyCharacter myChar4 = new MyCharacter('d');
     8 //        
     9 //        myChar1.display();
    10 //        myChar2.display();
    11 //        myChar3.display();
    12 //        myChar4.display();
    13 //        
    14 //        if(myChar1 == myChar3) {
    15 //            System.out.println("true");
    16 //        } else {
    17 //            System.out.println("false");
    18 //        }
    19         //1.创建MyCharacter工厂
    20         MyCharacterFactory factory = new MyCharacterFactory();
    21         
    22         //2.从工厂中取出相应的MyCharacter
    23         MyCharacter myChar1 = factory.getMyCharacter('a');
    24         MyCharacter myChar2 = factory.getMyCharacter('b');
    25         MyCharacter myChar3 = factory.getMyCharacter('a');
    26         MyCharacter myChar4 = factory.getMyCharacter('d');
    27         
    28         myChar1.display();
    29         myChar2.display();
    30         myChar3.display();
    31         myChar4.display();
    32         
    33         if(myChar1 == myChar3) {
    34             System.out.println("true");
    35         } else {
    36             System.out.println("false");
    37         }
    38     }
    39 }

    ===============================================================

     1 public class Person {
     2     private String name;
     3     private int age;
     4     private String sex;
     5     
     6     public Person(String name, int age, String sex) {
     7         super();
     8         this.name = name;
     9         this.age = age;
    10         this.sex = sex;
    11     }
    12     
    13     public Person() {
    14         
    15     }
    16     
    17     public String getName() {
    18         return name;
    19     }
    20     public void setName(String name) {
    21         this.name = name;
    22     }
    23     public int getAge() {
    24         return age;
    25     }
    26     public void setAge(int age) {
    27         this.age = age;
    28     }
    29     public String getSex() {
    30         return sex;
    31     }
    32     public void setSex(String sex) {
    33         this.sex = sex;
    34     }
    35 }

    老师

     1 public class Teacher extends Person {
     2     private String number;
     3     
     4     public String getNumber() {
     5         return number;
     6     }
     7 
     8     public void setNumber(String number) {
     9         this.number = number;
    10     }
    11 
    12     public Teacher(String name, int age, String sex,String number) {
    13         super(name, age, sex);
    14         this.number = number;
    15     }
    16     
    17     public Teacher() {
    18         super();
    19     }
    20 }

    老师工厂

     1 import java.util.HashMap;
     2 import java.util.Map;
     3 //老师工厂
     4 public class TeacherFactory {
     5     private Map<String,Teacher> pool;
     6     
     7     public TeacherFactory() {
     8         pool = new HashMap<String,Teacher>();
     9     }
    10     
    11     public Teacher getTeacher(String number) {
    12         Teacher teacher = pool.get(number);
    13         if(teacher == null) {
    14             teacher = new Teacher();
    15             teacher.setNumber(number);
    16             pool.put(number, teacher);
    17         }
    18         return teacher;
    19     }
    20 }

    测试方法

     1 public class MainClass {
     2     public static void main(String[] args) {
     3         TeacherFactory factory = new TeacherFactory();
     4         Teacher teacher1 = factory.getTeacher("0102034");
     5         Teacher teacher2 = factory.getTeacher("0102035");
     6         Teacher teacher3 = factory.getTeacher("0102034");
     7         Teacher teacher4 = factory.getTeacher("0102037");
     8         
     9         System.out.println(teacher1.getNumber());
    10         System.out.println(teacher2.getNumber());
    11         System.out.println(teacher3.getNumber());
    12         System.out.println(teacher4.getNumber());
    13         
    14         if(teacher1 == teacher3) {
    15             System.out.println("true");
    16         } else {
    17             System.out.println("false");
    18         }
    19     }
    20 }
  • 相关阅读:
    转载一篇关于kafka零拷贝(zero-copy)通俗易懂的好文
    kafka的一些核心理论知识
    Kafka知识点(Partitions and Segments)
    kafka: Producer配置和Consumer配置
    kafka: Java实现简单的Producer和Consumer
    SAP抛xml资料到kafka(本机模拟)
    解决方法: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation
    kafka log保存在本机的位置 kafka数据保存的位置
    Kafka: 下载安装和启动
    tomcat错误提示:指定的服务未安装。Unable to open the service 'tomcat9'的原因和解决方法
  • 原文地址:https://www.cnblogs.com/justdoitba/p/9033027.html
Copyright © 2011-2022 走看看