`
chendw_hz
  • 浏览: 11287 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

享元模式

 
阅读更多

享元模式的角色划分:

1,抽象享元角色:享元角色需要实现的公共接口。外蕴状态可以通过商业方法以参数的形式传入。

2,具体享角色:负责维护内蕴状态。且提供内蕴含状态的空间。内蕴状态不与环境有关,对象初始化时,内蕴含状态就已经产生。

3,享元工厂角色:负责维护和管理享元角色,在工厂中没有找到相应的享元对象,则负责创建相应的享元对象。

 本质工厂角色应该是个享元对象的容器。

4,客户端角色:自行维护外蕴状态,外蕴跟环境有关。

享元模式分单纯享元模式和复合享元模式

 这里就讲讲单纯享元模式。 下面以不同口味的冰棒为例。

//冰棒接口

public interface  Popsicle{

  //商业方法

   public void buy();

 

}

 

//具体享元对象

public class GreenPeasPopsicle implments Popsicle{

   //不同风味的雪糕,绿豆,荔枝味等 内蕴状态

    String   flavor = null;

   public GreenPeasPopsicle(String flavor){

               this.flavor = flavor;

  }

//客人购买不同味道的雪糕

 public void buy(){

    System.out.println("当钱被购买的雪糕风味是="+this.flavor);

}

//返回雪糕的名字

public String getFlavor(){

     return flavor;

 }

}

 

//风味工厂类,可以单实例

public class   PopsicleFactory{

private Map<String ,Popsicle> popsicleMap = new HashMap<String,Popsicle>();

 

 private PopsicleFactory instance = new PopsicleFactory();

//私有构造方法

 private PopsicleFactory(){

  

 }

//得工厂实例

public static PopsicleFactory getInstance(){

  return instance;

 } 

 

//维护和管理享元对象的工厂

 public Popsicle factory(String flavor){

  if(StringUtils.isBlank(flavor)){

   return null;

 }

 

  if(popsicleMap .contain(flavor)){

     return popsicleMap.get(flavor);

  }

 

  Popsicle popsicle = new GreenPeasPopsicle(flavor);

  popsicleMap.put(flavor,popsicle);

 }

}

//客户端端调用

public class  Client{

  public static void main(String args){

  //我要绿豆为的雪糕

   Popsicle greePopsicle = PopsicleFactory.getInstance().factory("雪糕味");

   grerPopsicle.buy();

   greePopsicle = PopsicleFactory.getInstance().factory("荔枝味");

  greePopsicle .buy();

  greePopsicle = PopsicleFactory.getInstance().factory("雪糕味");

  greePopsicle .buy();

 }

}

 

//打印结果

当钱被购买的雪糕风味是=雪糕味

当钱被购买的雪糕风味是=荔枝味

当钱被购买的雪糕风味是=雪糕味

 这里其实雪糕味只创建一个对象。因为他们的内蕴状态风味(雪糕味)是一样的。是共享的。

模式使用场景:

1, 大量使用对象产生时。

2,对象产生的内蕴状态不依赖环境而发生改变。

优点:

 提搞了性能以及不要创建重复的大量对象

缺点:

  查错比较困难。 

分享到:
评论

相关推荐

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

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

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

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

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

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

    设计模式之享元模式

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

    享元模式代码示例

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

    享元模式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