Groovy 设计模式 -- 享元模式

Flyweight Pattern

享元模式, 将对象的相同属性, 以节省内存为目的,存储为一份公共对象, 所有对象共用此分对象。

The Flyweight Pattern is a pattern for greatly reducing memory requirements by not requiring that heavy-weight objects be created in large numbers when dealing with systems that contain many things that are mostly the same. If for instance, a document was modelled using a complex character class that knew about unicode, fonts, positioning, etc., then the memory requirements could be quite large for large documents if each physical character in the document required its own character class instance. Instead, characters themselves might be kept within Strings and we might have one character class (or a small number such as one character class for each font type) that knew the specifics of how to deal with characters.

In such circumstances, we call the state that is shared with many other things (e.g. the character type) instrinsic state. It is captured within the heavy-weight class. The state which distinguishes the physical character (maybe just its ASCII code or Unicode) is called its extrinsic state.

 

 

例子

 

class Boeing797 { def wingspan = '80.8 m' def capacity = 1000 def speed = '1046 km/h' def range = '14400 km' // ... }
b797 hoax
class Airbus380 { def wingspan = '79.8 m' def capacity = 555 def speed = '912 km/h' def range = '10370 km' // ... }
a380
 
 
 
变为----》》》
 
class FlyweightFactory { static instances = [797: new Boeing797(), 380: new Airbus380()] } class Aircraft { private type // instrinsic state private assetNumber // extrinsic state private bought // extrinsic state Aircraft(typeCode, assetNumber, bought) { type = FlyweightFactory.instances[typeCode] this.assetNumber = assetNumber this.bought = bought } def describe() { println """ Asset Number: $assetNumber Capacity: $type.capacity people Speed: $type.speed Range: $type.range Bought: $bought """ } } def fleet = [ new Aircraft(380, 1001, '10-May-2007'), new Aircraft(380, 1002, '10-Nov-2007'), new Aircraft(797, 1003, '10-May-2008'), new Aircraft(797, 1004, '10-Nov-2008') ] fleet.each { p -> p.describe() }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值