java面向代码调优的设计模式之flyweight pattern

代码调优,实际上就是为了降低程序的时空代价。Flyweight Pattern允许在应用中不同部分共享使用objects,这个就可以大幅度的减少new的对象个数,降低大量objects带来的时空代价。应用flyweight pattern的对象其可分为内部特征(不管在什么场合使用该ovject,内部特征都不变)和外部特征(不是固定的,需要在不同场合分别计算并产生变化)。这个外部特征就保证了同一个对象可以在不同的场合进行应用,不同的场合需要不同的对象特性,我们就可以通过修改外部对象特征的方式使同一个对象表现出不同的特征。

下面我们给出一个关于机器人的对象的应用,其UML图为:

IAlien接口的两个实现,其主要的区别就是具有不同的形状,这属于内部属性。同时,对于IAlien在不同位置的调用显示出不同的状态是通过Color确定的。而什么颜色由传入的参数确定,这个我们就可以再不同的位置对于IAlien传入不同的参数,让其显示不同的状态,使其应用一个对象完成多个对象的功能。Factory类,用于存储新创建的对象,每次要对对象进行调用时,可以向Factory申请,此时Factory的作用和Object Pool基本相同。

下面给出代码实例:

class LargeAlien implements IAlien{

  private String Shape = "Large Shape";

  public String getShape(){

      return shape:

  }

  public Color getColor(int madlevel){

    if(madlevel==0)

    return Color.green;

  else if(madlevel == 1)

    return Color.red;

  else

    return Color.blue

  }

}

class LittleAlien implements IAlien{

  private String Shape = "Little Shape";

  public String getShape(){

      return shape:

  }

  public Color getColor(int madlevel){

    if(madlevel==0)

    return Color.green;

  else if(madlevel == 1)

    return Color.red;

  else

    return Color.blue

  }

}

public class AlienFactory {
  private Map<String, IAlien> list = new HashMap<>();
  public void SaveAlien(String index, IAlien alien) {
  list.put(index,alien);
  }
  public IAlien GetAlien(String index) {
  return list.get(index);
  }
}

AlienFactory factory = new AlienFactory();
factory.SaveAlien("LargeAlien", new LargeAlien());
factory.SaveAlien("LittleAlien", new LittleAlien());
IAlien a = factory.GetAlien("LargeAlien");
IAlien b = factory.GetAlien("LittleAlien");
System.out.println("Showing intrinsic states...");
System.out.println("Alien of type LargeAlien is " + a.getShape());
System.out.println("Alien of type LittleAlien is " + b.getShape());
System.out.println("Showing extrinsic states...");
System.out.println("Alien of type LargeAlien is " + a.getColor(0).toString());
System.out.println("Alien of type LargeAlien is " + a.getColor(1).toString());
System.out.println("Alien of type LittleAlien is " + b.getColor(0).toString());
System.out.println("Alien of type LittleAlien is " + b.getColor(1).toString());

屏幕输出为:

原文地址:https://www.cnblogs.com/mrchi/p/9219160.html

时间: 2024-08-18 20:32:09

java面向代码调优的设计模式之flyweight pattern的相关文章

36套精品Java高级课,架构课,java8新特性,P2P金融项目,程序设计,功能设计,数据库设计,第三方支付,web安全,高并发,高性能,高可用,分布式,集群,电商,缓存,性能调优,设计模式,项目实战,大型分布式电商项目实战视频教程

新年伊始,学习要趁早,点滴记录,学习就是进步! QQ:1225462853 视频课程包含: 36套Java精品高级课架构课包含:java8新特性,P2P金融项目,程序设计,功能设计,数据库设计,架构设计,web安全,高并发,高性能,高可用,高可扩展,分布式,集群,电商,缓存,性能调优,设计模式,项目实战,工作流,程序调优,负载均衡,Solr集群与应用,主从复制,中间件,全文检索,Spring boot,Spring cloud,Dubbo,Elasticsearch,Redis,ActiveMQ

Java性能调优_深入Java程序性能调优(并行开发、JVM调优)

深入Java程序性能调优(阿姆达尔定律.缓存组件.并行开发.线程池.JVM调优)课程讲师:special课程分类:Java核心适合人群:初级课时数量:33课时更新程度:完成用到技术:阿姆达尔定律.缓存组件.并行开发.线程池.JVM调优涉及项目:模式在实际开发中运用深入Java程序性能调优下载: http://pan.baidu.com/s/1ntn0ZTB 密码: ijluJava性能调优:国内关于Java性能调优的课程非常少,如此全面深入介绍Java性能调优,北风算是独家,Special讲师,

Java 应用性能调优实践

Java 应用性能优化是一个老生常谈的话题,典型的性能问题如页面响应慢.接口超时,服务器负载高.并发数低,数据库频繁死锁等.尤其是在"糙快猛"的互联网开发模式大行其道的今天,随着系统访问量的日益增加和代码的臃肿,各种性能问题开始纷至沓来.Java 应用性能的瓶颈点非常多,比如磁盘.内存.网络 I/O 等系统因素,Java 应用代码,JVM GC,数据库,缓存等.笔者根据个人经验,将 Java 性能优化分为 4 个层级:应用层.数据库层.框架层.JVM 层,如图 1 所示. 图 1.Ja

下载深入Java程序性能调优(阿姆达尔定律、缓存组件、并行开发、线程池、JVM调优)

深入Java程序性能调优(阿姆达尔定律.缓存组件.并行开发.线程池.JVM调优),刚刚入手,转一注册文件,视频的确不错,可以先下载看看:http://pan.baidu.com/s/1cvD3rw 密码:eevh 1.1. 性能概述--两个实战在线项目对比突出性能的重要性1.2. 性能概述--阿姆达尔定律解决性能的关键点2.1. 设计优化--模式在实际开发中运用012.2. 设计优化--模式在实际开发中运用02-延迟加载的核心2.3. 设计优化--模式在实际开发中运用03-基于动态代理的拦截器2

【Spark篇】---Spark调优之代码调优,数据本地化调优,内存调优,SparkShuffle调优,Executor的堆外内存调优

一.前述 Spark中调优大致分为以下几种 ,代码调优,数据本地化,内存调优,SparkShuffle调优,调节Executor的堆外内存. 二.具体    1.代码调优 1.避免创建重复的RDD,尽量使用同一个RDD 2.对多次使用的RDD进行持久化 如何选择一种最合适的持久化策略? 默认情况下,性能最高的当然是MEMORY_ONLY,但前提是你的内存必须足够足够大,可以绰绰有余地存放下整个RDD的所有数据.因为不进行序列化与反序列化操作,就避免了这部分的性能开销:对这个RDD的后续算子操作,

java程序性能调优---------------性能概述

一.程序的性能通过哪几个方面表现 1.执行速度(程序反应反应是否迅速.响应时间是否足够短) 2.分配内存 (分配内存是否合理,是否过多的消耗内存或者内存溢出) 3.启动时间(程序从运行到可以正常处理业务需要花费多长时间) 4.负载承受能力(当系统压力上升时,系统的执行速度.响应时间的上升曲线是否平缓) 二.性能的参考指标 1.执行时间(一段代码从开始运行到运行结束,所使用的时间) 2.CPU时间(函数或者线程占用CPU实际) 3.内存分配(程序在运行时占用的内存空间) 4.磁盘吞吐量(描述I/O

项目总结50:Linux服务器上web项目Java项目性能调优

项目总结50:Linux服务器上web项目Java项目性能调优 最近上线的电商项目,发现非常卡,用户体验非常差,折腾了好久之后,也逐渐找到原因,并针对原因解决方案,先整理总结. 项目基本情况: 1-使用阿里ECS.OSS等一系列相关服务: 2-用户总量1W+,日活量500+ 3-电商项目,有APP.小程序.管理平台三个模块,其中接口150+ 4-项目使用SSM框架: 5-项目tomcat服务,数据库Mysql,Redis放在一个同一个服务器上: 问题表现: 1-接口反应非常慢,导致APP和小程序

深入Java程序性能调优视频教程

下载:http://pan.baidu.com/s/1bi7Kj8 密码:mujd 课程专注于java应用程序的优化方法,技巧和思想,深入剖析软件设计层面.代码层面.JVM虚拟机层面的优化方法,理论结合实际,使用丰富的示例帮助学员理解理论知识. 第一课(性能概述--两个实战在线项目对比突出性能的重要性) 第二课(性能概述--阿姆达尔定律解决性能的关键点) 第三课(设计优化--模式在实际开发中运用01) 第四课(设计优化--模式在实际开发中运用02--延迟加载的核心) 第五课(设计优化--模式在实

Java程序性能调优深入浅出视频下载

国内关于Java性能调优的课程非常少,如此全面深入介绍Java性能调优,北风算是独家,Special讲师,十余年Java方面开发工作经验,资深软件开发系统架构师,本套课程系多年工作经验与心得的总结,课程有着很高的含金量和实用价值,一套拥有,高薪可求!一.本课程是怎么样的一门课程(全面介绍)   1.1.课程的背景    该课程是让大多数java开发者立足于编写高质量的程序,去感受java开发中的大智慧, 让java程序更优美. 1.2.课程内容简介 专注于java应用程序的优化方法,技巧和思想,