设计模式回顾系列文章:主要针对工作中常用常见的设计模式进行整理、总结,同时分享以供大家拍砖。
------------------------------------------------
享元模式(Flyweight)
运用共享技术有效地支持大量细粒度的对象。
适用于:
一个应用程序使用了大量的对象,完全由于使用大量的对象,造成很大的存储开销。
对象的大多数状态都可变为外部状态。
如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象。
应用程序不依赖于对象标识。由于Flyweight对象可以被共享,对于概念上明显有别的对象,标识测试将返回真值。
程序实现:
下面的程序举个例子,把祝福短信存储在手机里面,在需要发送的时候只要后面加上名字就行了(不知是否恰当)。
抽象类:
//Flyweight
public abstract class SMS {
abstract public void sendMessage(String personName);
}
实现类:
public class BirthdayMessage extends SMS{
@Override
public void sendMessage(String personName){
System.out.println("Happy Birthday!"+personName+"!");
}
}
public class SpringFestivalMessage extends SMS{
@Override
public void sendMessage(String personName) {
System.out.println("Happy Spring Festival!"+personName+"!");
}
}
享元工厂:
//FlyweightFactory
public class MessageFactory {
private List<SMS> pool = new ArrayList<SMS>();
public MessageFactory(){
pool.add(new SpringFestivalMessage());
pool.add(new BirthdayMessage());
}
//getFlyweight
public SMS getMessage(String key){
if("SpringFestival".equalsIgnoreCase(key)){
return pool.get(0);
}else{
return pool.get(1);
}
}
}
客户端调用:
public static void main(String[] args){
MessageFactory mf = new MessageFactory();
SMS sms = mf.getMessage("SpringFestival");
sms.sendMessage("Tom");
sms.sendMessage("Jerry");
sms = mf.getMessage("Birthday");
sms.sendMessage("Tom");
sms.sendMessage("Jerry");
}
举例:棋类程序中的棋子,和输入法程序中的汉字,都可以认为使用享元模式实现。
分享到:
相关推荐
如适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、装饰者模式(Decorator)、外观模式(Facade)、享元模式(Flyweight)和代理模式(Proxy)等。 - **行为型模式**:关注于对象间的职责分配,...
2. 结构型模式:这类模式关注如何组合和包装现有的类和对象,包括适配器(Adapter)、装饰(Decorator)、外观(Facade)、桥接(Bridge)、组合(Composite)、代理(Proxy)和享元(Flyweight)模式。C#中的委托和...
在本章节中,作者可能会回顾面向对象编程的基本概念,如封装、继承、多态等,并为后面介绍的设计模式奠定理论基础。 ### 2. 设计模式举例 这部分内容将通过具体的例子来介绍设计模式的应用场景,帮助读者理解不同...
从最初接触GoF的经典之作《设计模式:可复用面向对象软件的基础》,到后来的实际应用和教学过程中,作者经历了从困惑不解到豁然开朗的过程。这段旅程不仅是技术上的提升,更是思维方式的转变。 #### 1. 创建型模式 ...
2. 结构型模式(Structural Patterns):涉及到对象的结构,例如适配器(Adapter)、桥接(Bridge)、组合(Composite)、装饰(Decorator)、外观(Facade)、享元(Flyweight)、代理(Proxy)。 3. 行为型模式...
享元模式是一个结构型设计模式,它用于减少大量相似对象的内存消耗。 - **单纯享元模式的结构**:包含享元接口、单纯享元类以及享元工厂。 - **单纯享元模式的示意性源代码**:例如,创建不同颜色的文字。 - **复合...
作者回顾了自己学习设计模式的心路历程,从初学时的困惑和挑战,到逐渐掌握并能够在实际项目中灵活运用这些模式,最终达到了能够向他人传授知识的境界。作者认为,学习设计模式不仅是为了掌握一项技能,更重要的是...
享元模式( Flyweight ) 行为型模式包含了: 策略模式( Strategy ) 模板方法模式( Template Method ) 观察者模式( Observer ) 迭代子模式( Iterator ) 责任链模式( Chain of Responsibility ) 命令模式...
在完成所有设计模式的解析后,作者回顾了整个学习过程中的心路历程,包括初读GoF原著时的困惑、实现过程中遇到的问题以及最终领悟设计模式精髓时的喜悦。这一过程不仅仅是技术上的成长,更是一种思维方式的转变。 #...
作者回顾了自己学习设计模式的过程,从最初的困惑和挑战到最终的领悟和应用,强调了实践的重要性。学习设计模式的过程不仅仅是理论上的理解,更是一种实践的过程,通过不断地实践才能真正掌握这些模式并将其应用于...
享元模式是一种结构型设计模式,它用于减少创建大量相似对象所需的资源消耗。在“追MM”的过程中,享元模式可以帮助你有效地利用有限的时间和资源,通过共享某些通用的追求方式,避免重复工作。 #### 12. 代理模式...
- **结构型模式**:关注类或对象的组合方式,包括适配器(Adapter)、桥接(Bridge)、组合(Composite)、装饰(Decorator)、外观(Façade)、享元(Flyweight)和代理(Proxy)。 - **行为型模式**:关注对象之间的交互以及...
10. 享元模式(Flyweight Pattern):通过共享技术,有效地支持大量细粒度的对象。享元模式常用于节省内存,提高性能,特别是在大量对象的场景下。 11. 原型模式(Prototype Pattern):用原型实例指定创建对象的...
1. **设计模式回顾**(Design Patterns Revisited):书中的设计模式部分介绍了一些经典的设计模式,如: - **命令模式**(Command):将请求封装为一个对象,使你可以参数化不同请求,支持撤销操作,并可以将请求...
享元模式是一种结构型设计模式,它通过共享技术来有效地支持大量的细粒度对象。 **比喻理解:** 当你在聊天时,经常会遇到一些常用语句,如“你在干嘛呢?”、“早安”等。这些语句非常常见,因此你不需要每次都...
结构型模式关注如何组合类和对象以形成更大的结构,如适配器(Adapter)、桥接(Bridge)、装饰(Decorator)、外观(Facade)、代理(Proxy)、组合(Composite)和享元(Flyweight)。这些模式可以帮助我们更好地...
包括适配器模式(Adapter)、装饰器模式(Decorator)、代理模式(Proxy)、桥接模式(Bridge)、组合模式(Composite)、外观模式(Facade)和享元模式(Flyweight)。比如,适配器模式允许两个接口不兼容的对象...