flyweight pattern

      主要解决细粒度对象出现的数量级比较大的情况之下资源的大量消耗问题。对系统的性能有很好的减缓作用,而这些细粒度一般是具有某些相同的成员函数或者字段属性,把相同的部分和不相同的部分分离开来。

      UML如下:

2009010215472040.jpg

例子代码如下(例子不大合理,能明白其中原理就行):

ContractedBlock.gif ExpandedBlockStart.gif Flyweight pattern Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Flyweight_pattern
{
    
class Program
    {
        
static void Main(string[] args)
        {
            FlyweightFactory f 
= new FlyweightFactory();
            PageSOHU sohu 
= new PageSOHU();
            sohu.Setpage(
"max");
            sohu.Display();
            PageSina sina 
=(PageSina) f.Getpage("sina");
            sina.Setpage(
"min");
            sina.Display();
            Console.ReadLine();
        }
    }
    
abstract class Flyweight
    {
        
protected string pageStyle;
        
protected string page;
        
public abstract void Setpage(string pageStyleName);
        
public abstract void Display();
    }
    
class PageSOHU : Flyweight
    {
        
public PageSOHU()
        {
            page 
= "www.sohu.com";
        }
        
public override void Setpage(string pageStyleName)
        {
            pageStyle 
= pageStyleName;
        }
        
public override void Display()
        {
            Console.WriteLine(
"i am sohu page !");
        }
    }
    
class PageSina : Flyweight
    {
        
public PageSina()
        {
            page 
= "www.sina.com.cn";
        }
        
public override void Setpage(string pageStyleName)
        {
            pageStyle 
= pageStyleName;
        }
        
public override void Display()
        {
            Console.WriteLine(
"i am sina page !");
        }
    }

    
class FlyweightFactory
    {
        Dictionary
<string, Flyweight> flyweight = new Dictionary<string, Flyweight>();
        
public FlyweightFactory()
        {
            flyweight.Add(
"sohu"new PageSOHU());
            flyweight.Add(
"sina",new PageSina());
        }
        
public Flyweight Getpage(string pageName)
        {
            Flyweight f 
= flyweight[pageName] as Flyweight;
            
if (f==null)
            {
                
switch(pageName)
                {
                    
case "sohu": f = new PageSOHU();
                        
break;
                    
case "sina": f = new PageSina();
                        
break;
                }
                flyweight.Add(pageName,f);
            }
            
return f;
        }
        
//public FlyweightFactory()
        
//{
        
//    flyweight.Clear();
        
//}
        
//public Flyweight this[string page]
        
//{
        
//    get{
        
//        if(!flyweight.ContainsKey(page))
        
//            flyweight[page]=new Flyweight();
        
//        return flyweight[page];
        
//    }
        
//}
    }
}

 

posted on 2009-01-02 16:12  yongshi123 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/yongshi123/articles/1367008.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是组合模式、装饰器模式、外观模式、享元模式和代理模式的应用案例和代码实现步骤的简要说明: 1. 组合模式 (Composite Pattern): 应用案例:文件系统的目录结构可以使用组合模式来表示,其中目录和文件都可以作为容器或叶子节点,可以方便地进行递归操作。 代码实现步骤:创建一个抽象类或接口表示组件,其中包含添加、删除和获取子组件的方法。实现类分别表示叶子节点和容器节点,容器节点可以包含其他组件。 2. 装饰器模式 (Decorator Pattern): 应用案例:在一个图形绘制软件中,可以使用装饰器模式来实现不同的图形对象以及对图形进行装饰,例如添加颜色、添加边框等。 代码实现步骤:创建一个抽象类或接口表示基本对象或装饰器,其中包含一个基本对象的引用。具体装饰器类继承自该抽象类,并在调用方法时添加额外的功能。 3. 外观模式 (Facade Pattern): 应用案例:在一个电子商务平台中,可以使用外观模式来创建一个统一的接口,将不同子系统的功能封装起来,便于客户端调用。 代码实现步骤:创建一个外观类,该类提供了一个简单的接口来调用多个子系统的功能,并在内部进行协调和管理。 4. 享元模式 (Flyweight Pattern): 应用案例:在一个游戏中,可以使用享元模式来共享不同的游戏资源对象,例如共享相同的纹理、音频等,以减少内存的使用。 代码实现步骤:创建一个享元工厂类来管理共享对象,通过池化技术来缓存和重用对象,并提供一个获取共享对象的方法。 5. 代理模式 (Proxy Pattern): 应用案例:在一个网络请求中,可以使用代理模式来代表真实的网络请求对象,以进行一些额外的操作,例如鉴权、缓存等。 代码实现步骤:创建一个接口或抽象类来表示真实对象和代理对象,代理对象持有一个真实对象的引用,并在调用方法时进行一些额外的处理。 以上是这些设计模式的简要应用案例和代码实现步骤。在实际开发中,可以根据具体需求选择合适的设计模式,并根据设计模式的原则进行设计和实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值