`

享元模式

 
阅读更多
【享元模式】运用共享技术有效地支持大量细粒度的对象

package com.demo.flyweight;

//享元接口
public interface Flyweight {
	public double getHeight();
	public double getWidth();
	public double getLength();
	//使用参数mess获取外部数据
	public void printMess(String Mess);
}

package com.demo.flyweight;

import java.util.HashMap;

//享元工厂
public class FlyweightFactory {

	private HashMap<String, Flyweight> hashMap;
	static FlyweightFactory factory = new FlyweightFactory();

	private FlyweightFactory() {
		hashMap = new HashMap<String, Flyweight>();
	}

	public static FlyweightFactory getFactory() {
		return factory;
	}

	public synchronized Flyweight getFlyweight(String key) {
		if (hashMap.containsKey(key)) {
			return hashMap.get(key);
		} else {
			double width = 0, height = 0, length = 0;
			String[] str = key.split("#");
			width = Double.parseDouble(str[0]);
			height = Double.parseDouble(str[1]);
			length = Double.parseDouble(str[2]);
			Flyweight ft = new ConcreteFlyweight(width, height, length);
			hashMap.put(key, ft);
			return ft;
		}
	}
	
	//ConcreteFlyweight是内部类
	class ConcreteFlyweight implements Flyweight {

		private double width;
		private double height;
		private double length;

		private ConcreteFlyweight(double width, double height, double length) {
			this.width = width;
			this.height = height;
			this.length = length;
		}

		@Override
		public double getHeight() {
			// TODO Auto-generated method stub
			return height;
		}

		@Override
		public double getWidth() {
			// TODO Auto-generated method stub
			return width;
		}

		@Override
		public double getLength() {
			// TODO Auto-generated method stub
			return length;
		}

		@Override
		public void printMess(String Mess) {
			// TODO Auto-generated method stub
			//输出外部数据mess
			System.out.print(Mess);
			//输出内部数据width
			System.out.print("宽度:" + width);
			System.out.print("高度:" + height);
			System.out.println("长度:" + length);
		}
	}
}

package com.demo.flyweight;


public class Car {

	//存放享元对象的引用
	Flyweight flyweight;
	String name,color;
	int power;
	
	Car(Flyweight flyweight,String name,String color,int power){
		this.flyweight=flyweight;
		this.name=name;
		this.color=color;
		this.power=power;
	}
	
	public void print(){
		System.out.print("名称:"+name);
		System.out.print("颜色:"+color);
		System.out.print("功率:"+power);
		System.out.print("宽度:"+flyweight.getWidth());
		System.out.print("高度:"+flyweight.getHeight());
		System.out.println("长度:"+flyweight.getLength());
	}
}

package com.demo.flyweight;

public class Application {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		FlyweightFactory factory=FlyweightFactory.getFactory();
		double width=1.8,height=1.47,length=5.12;
		String key=""+width+"#"+height+"#"+length;
		Flyweight flyweight=factory.getFlyweight(key);
		Car audiA6One=new Car(flyweight,"奥迪A6","黑色",128);
		Car audiA6Two=new Car(flyweight,"奥迪A6","灰色",160);
		audiA6One.print();
		audiA6Two.print();
		
		width=1.77;
		height=1.45;
		length=4.63;
		key=""+width+"#"+height+"#"+length;
		flyweight=factory.getFlyweight(key);
		Car audiA4One=new Car(flyweight,"奥迪A4","黑色",126);
		Car audiA4Two=new Car(flyweight,"奥迪A4","灰色",138);
		
		flyweight.printMess("名称:奥迪 A4 颜色:蓝色 功率:126");
		flyweight.printMess("名称:奥迪 A6 颜色:红色 功率:138");
	}
}

名称:奥迪A6颜色:黑色功率:128宽度:1.8高度:1.47长度:5.12
名称:奥迪A6颜色:灰色功率:160宽度:1.8高度:1.47长度:5.12
名称:奥迪 A4 颜色:蓝色 功率:126宽度:1.77高度:1.45长度:4.63
名称:奥迪 A6 颜色:红色 功率:138宽度:1.77高度:1.45长度:4.63
分享到:
评论

相关推荐

    设计模式的享元模式的例子

    享元模式是软件设计模式中的一种结构型模式,它的主要目的是通过共享大量细粒度对象来减少内存的使用,提高系统性能。在许多场景下,尤其是处理大量相似对象时,享元模式能显著减少内存开销。这个压缩包文件...

    软件设计模式——享元模式设计报告

    享元模式是一种软件设计模式,它的主要目的是为了提高性能,减少对象的创建,尤其是在大量相似对象需要被创建的情况下。在给定的咖啡店案例中,享元模式的应用可以帮助优化内存使用,避免为每杯咖啡的配料表分配独立...

    享元模式,内含可运行代码和解释

    享元模式是一种经典的设计模式,属于结构型模式,它的核心思想是通过共享已经存在的对象来减少内存中的对象数量,从而提高系统性能。在许多场景下,特别是计算机编程中,我们可能会遇到大量的相似对象,比如在图形...

    设计模式之享元模式

    享元模式是软件设计模式中的一种结构型模式,它的主要目的是为了提高性能,尤其是在处理大量对象时。在享元模式中,通过共享技术来有效支持大量细粒度的对象,从而减少内存消耗。《设计模式之禅》这本书是设计模式...

    享元模式代码示例

    享元模式是一种结构型设计模式,它通过共享已有对象来减少内存中对象的数量,从而达到降低内存占用的目的。在面向对象编程中,当系统需要创建大量相似对象时,享元模式能够有效地提升性能,因为大部分对象是重复的,...

    享元模式Demo

    享元模式是一种优化资源使用的软件设计模式,尤其适用于对象创建成本较高或系统内存有限的情况。在计算机科学中,特别是编程领域,享元模式通过共享大量相似对象来减少内存占用,提高程序性能。它通过将对象的状态...

    设计模式学习笔记--Flyweight享元模式.docx

    享元模式是一种设计模式,属于构造型模式,其主要目的是减少对象的数量,通过共享大量相似对象的内部状态来节省内存。这种模式在处理大量细粒度对象时特别有用,能够有效地提高系统的性能。 享元模式的核心是...

    总结JavaScript设计模式编程中的享元模式使用

    享元模式是软件工程中一种用于优化性能的设计模式,它通过共享相似对象的实例来减少内存使用或者计算的开销。在JavaScript编程中,尤其是处理DOM操作和大量相似对象时,享元模式的使用尤为关键。 享元模式的主要...

    Android享元模式Demo

    享元模式是一种优化资源利用、减少对象创建的设计模式,它在Android开发中也有着广泛的应用。在这个"Android享元模式Demo"中,我们将探讨如何在Android环境中实现享元模式,并通过具体的实例来理解其工作原理。 享...

    设计模式-享元模式(讲解及其实现代码)

    享元模式是一种结构型设计模式,它通过共享已有对象来减少内存中对象的数量,从而达到降低系统内存占用、提高性能的目的。在软件工程中,当系统中存在大量相似或重复的对象时,享元模式尤为适用。 享元模式的核心是...

    Java设计模式之享元模式

    享元模式是软件设计模式中的一种结构型模式,它的核心思想是通过共享已经存在的对象来减少内存中的对象数量,从而提高系统性能。在Java中,享元模式常用于处理大量相似对象的场景,例如在图形界面中绘制大量相似的...

    第15章_享元模式.ppt

    在享元模式中可以共享的相同内容称为内部状态(Intrinsic State),而那些需要外部环境来设置的不能共享的内容称为外部状态(Extrinsic State),由于区分了内部状态和外部状态,因此可以通过设置不同的外部状态使得相同...

    享元模式代码+文档

    享元模式是一种结构型设计模式,它通过共享已有对象来减少系统中对象的数量,从而达到降低内存占用的目的。在软件工程中,当一个系统需要处理大量相似对象时,享元模式能够有效地提升性能,尤其在处理轻量级对象时...

    享元模式flyweight

    享元模式(Flyweight Pattern)是一种结构型设计模式,它能有效地减少系统中对象的数量,从而降低内存消耗,提高性能。这种模式通过共享大量相似对象的内部状态来达到这一目标,而只保留对象的外部状态在外部管理。...

    设计模式(C#)之享元模式(Flyweight Pattern)

    享元模式是设计模式中的一种结构型模式,它主要通过共享已有对象来减少内存中对象的数量,从而提高系统性能。在C#编程中,享元模式尤其适用于那些创建大量相似对象且内存消耗较大的场景。本篇文章将深入探讨享元模式...

    享元模式的分析以及实际应用.docx

    享元模式是一种优化资源利用的设计模式,主要用于减少创建和管理对象的数量,以达到节省内存的目的。在软件工程中,尤其是在处理大量相似对象时,享元模式能够显著提高系统的性能。享元模式通过共享那些可以共享的...

    C#面向对象设计模式纵横谈(12):Flyweight 享元模式(结构型模式) (Level 300)

    享元模式是面向对象设计中的一种结构型模式,它的主要目的是通过共享大量相似对象来减少内存的使用,提高系统的性能。在C#编程语言中,我们可以利用享元模式来优化那些具有大量实例但大部分状态可以共享的对象。在这...

    java设计模式【之】享元模式【源码】【场景:多缓存可选模式】

    java设计模式【之】享元模式【源码】【场景:多缓存可选模式】 /** * 享元模式(预加载单例) * “元” 理解为 “同一地址对象” * 运用共享技术,减少对象的创建,降低对象的数量,降低内存消耗,提高性能 * ...

    享元模式1

    享元模式 享元模式(Flyweight Pattern)是一种结构型设计模式,旨在减少大量相似对象的创建,降低系统资源的开销和内存压力。该模式通过共享已经存在的对象来大幅减少需要创建的对象数量,避免创建大量相似类带来...

Global site tag (gtag.js) - Google Analytics