A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孔祥攀 黑马帝   /  2011-7-27 19:01  /  2003 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

就看了一个  i.display(int x,int y)

评分

参与人数 1技术分 +1 收起 理由
admin + 1 我也学学!

查看全部评分

5 个回复

倒序浏览
黑马网友  发表于 2011-7-27 19:06:17
沙发
公共交换电话网的使用方式就是生活中常见的享元模式的例子。公共交换电话网中的一些资源,例如拨号音发生器、振铃发生器和拨号接收器,都是必须由所有用户共享的,不可能为每一个人都配备一套这样的资源,否则公共交换电话网的资源开销也太大了。当一个用户拿起听筒打电话时,他根本不需要知道到底使用了多少资源,对用户而言所有的事情就是有拨号音,拨打号码,拨通电话就行了。所以,就有很有人会共用一套资源,非常节省,这就是享元模式的基本思想。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-27 19:08:57
藤椅

可能我没表达清楚 或者 有误区

我是想问具体在代码中的体现
回复 使用道具 举报
黑马网友  发表于 2011-7-27 19:13:20
板凳
可以说享元模式的一部分的实现是和登记式单例模式有些相像。他们都使用了一个注册表来保存已有的对象。但是登记式单例模式主要是为了解决单例类不能继承的问题,因此在这个模式里面继承关系是不可少的。而在享元中则没有。可以说他们在保存对象的方式上是相同的。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-27 19:15:33
报纸
String str1="aaa";
String str2="aaa";
System.out.println(str1==str2);//true
回复 使用道具 举报
当都具备下列情况时,使用Flyweight模式:
    1.一个应用程序使用了大量的对象。
    2.完全由于使用大量的对象,造成很大的存储开销。
    3.对象的大多数状态都可变为外部状态。
    4.如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象。
    5.应用程序不依赖于对象标识。由于Flyweight对象可以被共享,对于概念上明显有别的对象,标识测试将返回真值。

Flyweight 描述一个接口,通过这个接口flyweight可以接受并作用于外部状态。[code=java]public interface Flyweight {
    void action(int arg);
}[/code]ConcreteFlyweight 实现Flyweight接口,并为内部状态(如果有的话)增加存储空间。
ConcreteFlyweight对象必须是可共享的。它所存储的状态必须是内部的;即,它必须独立于ConcreteFlyweight对象的场景。[code=java]public class FlyweightImpl implements Flyweight {
    public void action(int arg) {
        // TODO Auto-generated method stub
        System.out.println("参数值: " + arg);
    }
}[/code]FlyweightFactory创建并管理flyweight对象。
确保合理地共享flyweight。当用户请求一个flyweight时,FlyweightFactory对象提供一个已创建的实例或者创建一个(如果不存在的话)。[code=java]public class FlyweightFactory {
    private static Map flyweights = new HashMap();   
    public FlyweightFactory(String arg) {
        flyweights.put(arg, new FlyweightImpl());
    }
   
    public static Flyweight getFlyweight(String key) {
        if (flyweights.get(key) == null) {
            flyweights.put(key, new FlyweightImpl());
        }
        return flyweights.get(key);
    }
   
    public static int getSize() {
        return flyweights.size();
    }
}[/code]测试[code=java]public class Test {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Flyweight fly1 = FlyweightFactory.getFlyweight("a");
        fly1.action(1);
        
        Flyweight fly2 = FlyweightFactory.getFlyweight("a");
        System.out.println(fly1 == fly2);
        
        Flyweight fly3 = FlyweightFactory.getFlyweight("b");
        fly3.action(2);
        
        Flyweight fly4 = FlyweightFactory.getFlyweight("c");
        fly4.action(3);
        
        Flyweight fly5 = FlyweightFactory.getFlyweight("d");
        fly4.action(4);
        
        System.out.println(FlyweightFactory.getSize());
    }
}[/code]result[code=java]参数值: 1
true
参数值: 2
参数值: 3
参数值: 4
4[/code]
[ 本帖最后由 詹季春 于 2011-07-28  00:09 编辑 ]

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马