复合享元涉及的角色如下:
1、抽象享元角色
2、具体享元
3、复合享元(复合享元是由单纯具体享元复合而成的)//如果是简单享元这条没有
4、享元工厂
5、客户端

简单享元演示代码如下

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace FlyweightFactory
{
    
class Program
    
{
        
//抽象享元
        abstract class Cause //事业
        {
            
abstract public void OutInput(string name);//输出所从事的行业
        }



        
//具体享元(互联网)
        class IT : Cause 
        
{
            
private string work = "从事互联网行业";

            
override public void OutInput(string name)
            
{
                Console.WriteLine(
"{0} 是{1}",
                 name, work);
            }

        }



        
//具体享元(房地产)
        class House : Cause 
        
{
            
private string work = "从事房地产行业";

            
override public void OutInput(string name)
            
{
                Console.WriteLine(
"{0} 是{1}",
                  name, work);
            }

        }



        
//(享元工厂)
        class CauseFactory
        
{

            
private Hashtable flyweights = new Hashtable();

            
// 构造函数(享元工厂)    享元工厂作用:就是把多个对象的实例放在一起,好供客户端动态调用
            public CauseFactory()
            
{
                flyweights.Add(
"I"new IT());
                flyweights.Add(
"H"new House());
            }


            
//得到从事的事业(享元)
            public Cause GetCause(string key)
            
{
                
return ((Cause)flyweights[key]);
            }

        }


        
//客户端
        static void Main(string[] args)
        
{
            
string MaYun = "马云";
            
string WangShi = "王石";
            CauseFactory f 
= new CauseFactory();
            
//根据不同类别判别从事那个行业
            Cause c1 = f.GetCause("I");//字母I对应对象IT行业
            c1.OutInput(MaYun);//输出马云所从事的行业

            Cause c2 
= f.GetCause("H");//字母H对应对象House行业
            c2.OutInput(WangShi);//输出王石所从事的行业
        }


      
    }

}


享元模式要点

1、本设计模式主要解决面向对象的代价问题。
2、本模式通过共享对象来减少系统中对象实例个数,从而减少内存消耗。

posted on 2007-09-28 20:39  萧佰刚  阅读(286)  评论(1编辑  收藏  举报