首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 单态设计模式的例子
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-27 16:46:34 楼主
    China soft管理系统中的公司类的设计必须保障无论何时创建对象都只能是同一对象,设计Company类实现要求
    使用单态设计模式来完成类的设计,谢谢!!!
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-27 16:52:561楼 得分:0
    Java code
    public class Company { private static Company instance = new Company(); private Company() { } public static synchronized Company getInstance() { return instance; } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-27 16:55:152楼 得分:0
    public class Company{

    private Company com;

    private Company(){}

    public static synchronized Company getInstance(){
     
        if(com==null) com=new Company();
        return com;
    }
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qq7338367
    • 等级:
    发表于:2008-04-27 17:09:173楼 得分:0
    synchronized没必要
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-27 17:18:454楼 得分:0
    引用 2 楼 wanghy2008 的回复:
    public class Company{

    private Company com;

    private Company(){}

    public static synchronized Company getInstance(){
       
        if(com==null) com=new Company();
        return com;
    }
    }

    private Company com;必须static才行。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • anqini
    • 等级:
    发表于:2008-04-27 17:33:015楼 得分:0
    Java code
    //被前面人抢先了... public class Company { private static Company c = null; private Company() { } public static synchronized Company getInstance() { if(c == null)c = new Company(); return c; } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-27 18:00:006楼 得分:0
    类的定义最好加上final
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-27 18:20:267楼 得分:0
    就是私有化构造函数,提供共有的属性或者方法来构造对象,这个很不错了,还注意了多线程的情况synchronized
    Java code
    public class Company { private static Company c = null; private Company() { } public static synchronized Company getInstance() { if(c == null)c = new Company(); return c; } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-27 18:28:168楼 得分:0
    public class Company{

      private Company com;

      private Company(){}

      public static Company getInstance(){   
        if(com==null)
            com=new Company();
        return com;
      }
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-27 18:29:319楼 得分:0
    引用 3 楼 qq7338367 的回复:
    synchronized没必要


    支持 1 楼和 7 楼

    synchronized是有必要的 。因为如果是在多线程,多类加载器的环境下 ,static 也无法保证线程安全。
    所以synchronized是必要的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-27 18:55:3910楼 得分:0
    能注释一下程序并介绍一下单态设计模式吗??
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-27 19:45:3111楼 得分:0
    单态设计模式就是一个类只能产生一个实例对象.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-27 21:30:3312楼 得分:0
    3点:
      private Company 对象,

      private Company构造器,

      public static 返回Company方法.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-27 21:49:3113楼 得分:0
    单态?这是谁的翻译?
    Singleton翻译成“单态”不准确吧?叫“单件”或“单例”才准确。
    “单态”这个词,用来形容final类还差不多。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-27 22:06:5914楼 得分:0
    引用 5 楼 anqini 的回复:
    Java code//被前面人抢先了...publicclassCompany {privatestaticCompany c=null;privateCompany() {
           
        }publicstaticsynchronizedCompany getInstance() {if(c==null)c=newCompany();returnc;
        }
    }

    还注意到了synchronized,学习了
    还有Singleton翻成单态,好别扭啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-04-27 22:37:3915楼 得分:0
    吓死我...
    Singleton如果只是单线程的话..简单死了...只是构造函数改成private就好了
    可是要是多线程呢?特别像是WEB开发的时候呢?是否要考虑这个唯一的对象被多个线程同时要求时的同步问题呢?
    当然了..我只是瞎说说而已啦...我是小白
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qq7338367
    • 等级:
    发表于:2008-05-04 22:04:0416楼 得分:0
    引用 9 楼 caoyinghui1986 的回复:
    引用 3 楼 qq7338367 的回复:
    synchronized没必要


    支持 1 楼和 7 楼

    synchronized是有必要的 。因为如果是在多线程,多类加载器的环境下 ,static 也无法保证线程安全。
    所以synchronized是必要的。

    误导后面这么多人。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qq7338367
    • 等级:
    发表于:2008-05-04 22:09:5317楼 得分:0
    1、static本来就不是用来保证线程安全的。
    2、带状态的单例类在多线程、多虚拟机的情况下本来就会有问题。
    3、饿汉单例不需要synchronized,懒汉单例才需要。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-04 22:13:4618楼 得分:0
    引用 5 楼 anqini 的回复:
    Java code
    //被前面人抢先了...
    public class Company {
        private static Company c = null;
        private Company() {
           
        }
        public static synchronized Company getInstance() {
            if(c == null)c = new Company();
            return c;
        }
    }

    同意,一定要static的。要么会造成构造方法嵌套调用
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qq7338367
    • 等级:
    发表于:2008-05-04 22:17:3919楼 得分:0
    引用 13 楼 Dan1980 的回复:
    单态?这是谁的翻译?
    Singleton翻译成“单态”不准确吧?叫“单件”或“单例”才准确。
    “单态”这个词,用来形容final类还差不多。

    也有“单态”的叫法,因为单例类的构造方法私有法,不可以被继承,所以又称单态模式。
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved