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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值