首页 > 新闻系统 > 编程天地 > 文章正文

Flyweight模式基础了解

2008-04-18 08:52:06 来源:中国自学编程网 作者:佚名 点击:
抽象享元(Flyweight)角色:此角色是所有的具体享元类的超类,为这些类规定出需要实现的公共接口。那些需要外蕴状态(External State)的操作可以通过调用商业方法以参数形式传入。

      抽象享元(Flyweight)角色:此角色是所有的具体享元类的超类,为这些类规定出需要实现的公共接口。那些需要外蕴状态(External State)的操作可以通过调用商业方法以参数形式传入。 

    具体享元(ConcreteFlyweight)角色:实现抽象享元角色所规定的接口。如果有内蕴状态的话,必须负责为内蕴状态提供存储空间。享元对象的内蕴状态必须与对象所处的周围环境无关,从而使得享元对象可以在系统内共享的。 

    享元工厂(FlyweightFactory)角色:本角色负责创建和管理享元角色。本角色必须保证享元对象可以被系统适当地共享。当一个客户端 对象调用一个享元对象的时候,享元工厂角色会检查系统中是否已经有一个复合要求的享元对象。如果已经有了,享元工厂角色就应当提供这个已有的享元对象;如 果系统中没有一个适当的享元对象的话,享元工厂角色就应当创建一个合适的享元对象。 

    客户端(Client)角色:本角色需要维护一个对所有享元对象的引用。本角色需要自行存储所有享元对象的外蕴状态 

    在饭店里,如果有菜谱所要的菜,就不用去买,直接去菜库里去拿,如果没有就要去买,然后放在菜库里. 

Java代码 
public interface FlyWeight   
{   
    public void buy(People people);   
    public String getFoodName();   
    public void setFoodName(String foodName);   
}   
public interface People   
{    
    public void cooking(String foodName);   
}   
   
public class Food implements FlyWeight   
{   
    private String foodName;   
   
    public void buy(People people)   
    {   
        people.cooking(foodName);   
    }   
   
    public String getFoodName()   
    {   
        return foodName;   
    }   
   
    public void setFoodName(String foodName)   
    {   
        this.foodName = foodName;   
    }   
   
}   
public class Kitchener implements People   
{   
   
    public void cooking(String foodName)   
    {   
        System.out.println("cooking----"+foodName);   
   
    }   
}   
public class FlyWeightFactoy   
{   
    private Hashtable<String, FlyWeight> storage = new Hashtable<String, FlyWeight>();   
       
    public FlyWeight getFood(String key)  
9 7 3 1 2 3 4 8 :

精彩推荐
焦点大图推荐
本类热门文章

论坛美图

广告联系 | 版权说明 | 意见建议 | 加入收藏 | 军网站群 [ 军软件园 - 军软件商城 - 军软件园论坛 ]

电信与信息服务业务经营许可证:京ICP证050203