• 【设计模式】11、享元模式


     1 package com.shejimoshi.structural.Flyweight;
     2 
     3 
     4 /**
     5  * 功能:运用共享技术有效地支持大量细粒度的对象,这个就是作为享元的类
     6  * 适用:1、一个应用程序使用了大量的对象
     7  *      2、完全由于使用大量的对象、造成很大的存储开销
     8  *      3、对象的大多数状态都可以改变为外部状态
     9  *      4、如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象
    10  *      5、应用程序不依赖于对象标识
    11  * 时间:2016年2月27日下午10:12:01
    12  * 作者:cutter_point
    13  */
    14 public abstract class Phone
    15 {
    16     public abstract void use();
    17 }
     1 package com.shejimoshi.structural.Flyweight;
     2 
     3 
     4 /**
     5  * 功能:苹果手机享元
     6  * 时间:2016年2月27日下午10:23:27
     7  * 作者:cutter_point
     8  */
     9 public class ApplePhone extends Phone
    10 {
    11     private String type;
    12     
    13     public ApplePhone(String type)
    14     {
    15         this.type = type;
    16     }
    17 
    18     @Override
    19     public void use()
    20     {
    21         System.out.println("使用"+ type +"苹果手机");
    22     }
    23 
    24 }
     1 package com.shejimoshi.structural.Flyweight;
     2 
     3 import java.util.HashMap;
     4 import java.util.Map;
     5 
     6 
     7 /**
     8  * 功能:这个就是享元工厂
     9  * 时间:2016年2月27日下午10:26:20
    10  * 作者:cutter_point
    11  */
    12 public class PhoneFactory
    13 {
    14     private static Map<String, Phone> phones = new HashMap<String, Phone>();
    15     
    16     public static Phone getPhone(String type)
    17     {
    18         //这里返回的值可以是新创建的,也可以是已经存在的
    19         Phone phone = phones.get(type);
    20         //如果不存在就新建
    21         if(phone == null)
    22         {
    23             phone = new ApplePhone(type);
    24             phones.put(type, phone);    //添加进去
    25         }
    26         
    27         return phone;
    28     }
    29     
    30     public int size()
    31     {
    32         return phones.size();
    33     }
    34     
    35 }
     1 package com.shejimoshi.structural.Flyweight;
     2 
     3 
     4 /**
     5  * 功能:享元测试
     6  * 时间:2016年2月27日下午10:34:46
     7  * 作者:cutter_point
     8  */
     9 public class Test
    10 {
    11     private PhoneFactory pf = new PhoneFactory();
    12     private Phone p1;
    13     private Phone p2;
    14     private Phone p3;
    15     private Phone p4;
    16     private Phone p5;
    17     
    18     public Test()
    19     {
    20         p1 = pf.getPhone("银色");
    21         p2 = pf.getPhone("土豪金");
    22         p3 = pf.getPhone("土豪金");
    23         p4 = pf.getPhone("玫瑰金");
    24         p5 = pf.getPhone("银色");
    25     }
    26     
    27     public void usethem()
    28     {
    29         p1.use();
    30         p2.use();
    31         p3.use();
    32         p4.use();
    33         p5.use();
    34         System.out.print("工厂大小:" + pf.size());
    35     }
    36     
    37     public static void main(String[] args)
    38     {
    39         Test t = new Test();
    40         t.usethem();
    41     }
    42 }

    结果:

    使用银色苹果手机
    使用土豪金苹果手机
    使用土豪金苹果手机
    使用玫瑰金苹果手机
    使用银色苹果手机
    工厂大小:3
    

      

  • 相关阅读:
    网页连接无法打开可运行
    SET XACT_ABORT
    用Windows Live Writer写CSDN博客的步骤
    ATO,PTO
    什么是贸易顺差?
    ATO/MTO类机械制造业特点以及ERP需求分析(二)
    如何在早期版本的 Office 中打开并保存 Word 2007、Excel 2007 和 PowerPoint 2007 文件
    Alpha和Beta测试简介
    IIS6.0下 Asp网页访问出现500的问题
    合格的程序员
  • 原文地址:https://www.cnblogs.com/cutter-point/p/5223782.html
Copyright © 2020-2023  润新知