如何设计这个单例模式?

weixin_42406391 2020-12-22 09:22:45
想做个winform版本的Toast。
初步设计单例模式

private Toast() {
lbl = new Label();
lbl.Name = "_lblTips";
}
public static Toast getInstance()
{
if (toast == null) {
toast = new Toast();
timer = new Timer();
timer.Interval = duration;
timer.Tick += timer_Tick;
timer.Start();
}
return toast;
}
如果使用静态实例的话,成员还需要静态么?比如这个timer是设计成静态还是普通的?
...全文
502 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_42406391 2020-12-22
  • 打赏
  • 举报
回复
引用 7 楼 wanghui0380 的回复:
[quote=引用 4 楼 jhdxhj 的回复:]茴香豆的茴字的9种写法
没办法,某园子过于内卷了。所以看那园子文章的人都过于卷了。而且你还不能指出问题,你要指出问题了,绝对会被群攻。 无论是俺这里说,还是人家园子里自己说,都得会被群攻的 https://www.cnblogs.com/willick/p/14152115.html 看一下这里的评论,嘿嘿,要说真像的人,一定会被群殴。 至于这帖子,本身你不回复。我都懒得回答,就让他们自己卷死好了。 既然回复了,我们还是说说。没有上下文你讨论个啥,如果喜欢看园子的文章,那就找园子的人去玩。俺们这里只关注上下文 so,先不说啥多线程问题,就先说问题本身。你静态变量和实例有关系么?静态变量和实例没有关系,所以如果你想静态变量,根本就不需要啥“单例”,单例===全名全局唯一实例,讨论的是实例-----------设计模式放在3大类的第一类创建型模式,讨论的是怎么创建,怎么new so----------静态变量需要new一个实例么?[/quote] 变量需要new?你说的啥.....
strife013 2020-12-22
  • 打赏
  • 举报
回复
用静态变量+私有构造函数,double lock,
wanghui0380 2020-12-22
  • 打赏
  • 举报
回复
引用 4 楼 jhdxhj 的回复:
茴香豆的茴字的9种写法
没办法,某园子过于内卷了。所以看那园子文章的人都过于卷了。而且你还不能指出问题,你要指出问题了,绝对会被群攻。 无论是俺这里说,还是人家园子里自己说,都得会被群攻的 https://www.cnblogs.com/willick/p/14152115.html 看一下这里的评论,嘿嘿,要说真像的人,一定会被群殴。 至于这帖子,本身你不回复。我都懒得回答,就让他们自己卷死好了。 既然回复了,我们还是说说。没有上下文你讨论个啥,如果喜欢看园子的文章,那就找园子的人去玩。俺们这里只关注上下文 so,先不说啥多线程问题,就先说问题本身。你静态变量和实例有关系么?静态变量和实例没有关系,所以如果你想静态变量,根本就不需要啥“单例”,单例===全名全局唯一实例,讨论的是实例-----------设计模式放在3大类的第一类创建型模式,讨论的是怎么创建,怎么new so----------静态变量需要new一个实例么?
ziqi0716 2020-12-22
  • 打赏
  • 举报
回复
引用 3 楼 weixin_42406391 的回复:
[quote=引用 1 楼 ziqi0716 的回复:]设计单例第一步:把构造函数给改成private. 第二步:设置静态实例全属性Instance

    public class Toast
    {
        private Toast()
        {
        } 
        public static Toast Instance { get; } = new Toast(); 

        public string Name { get; set; }
    }
当然,你要是有多线程,要考虑并发创建造成多次实例化等问题.
兄弟你这个和我问的啥关系呀.....[/quote] 你的timer和这个Name一样,是成员变量,不用静态,因为只有一个实例
ziqi0716 2020-12-22
  • 打赏
  • 举报
回复
引用 3 楼 weixin_42406391 的回复:
[quote=引用 1 楼 ziqi0716 的回复:]设计单例第一步:把构造函数给改成private. 第二步:设置静态实例全属性Instance

    public class Toast
    {
        private Toast()
        {
        } 
        public static Toast Instance { get; } = new Toast(); 

        public string Name { get; set; }
    }
当然,你要是有多线程,要考虑并发创建造成多次实例化等问题.
兄弟你这个和我问的啥关系呀.....[/quote] 这就是例子啊,用的时候Toast.Instance就是你要的实例了呀
jhdxhj 2020-12-22
  • 打赏
  • 举报
回复
茴香豆的茴字的9种写法
weixin_42406391 2020-12-22
  • 打赏
  • 举报
回复
引用 1 楼 ziqi0716 的回复:
设计单例第一步:把构造函数给改成private. 第二步:设置静态实例全属性Instance

    public class Toast
    {
        private Toast()
        {
        } 
        public static Toast Instance { get; } = new Toast(); 

        public string Name { get; set; }
    }
当然,你要是有多线程,要考虑并发创建造成多次实例化等问题.
兄弟你这个和我问的啥关系呀.....
ziqi0716 2020-12-22
  • 打赏
  • 举报
回复
public static Toast Instance { get; } = new Toast(); 这个也可以写成方法,把静态实例设置不可见,统一调用包装后的getInstance方法
ziqi0716 2020-12-22
  • 打赏
  • 举报
回复
设计单例第一步:把构造函数给改成private. 第二步:设置静态实例全属性Instance

    public class Toast
    {
        private Toast()
        {
        } 
        public static Toast Instance { get; } = new Toast(); 

        public string Name { get; set; }
    }
当然,你要是有多线程,要考虑并发创建造成多次实例化等问题.
lorimoon 2020-12-22
  • 打赏
  • 举报
回复
引用 15 楼 weixin_42406391的回复:
[quote=引用 14 楼 lorimoon 的回复:]var from =BaseFrom. GetFrom<ToaseFrom>(); 按以上的最终获实列方式来写。from 的东西直接设计器内拖就是了。至于具体实现的话:。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。自。。。。。。。。己。。。。。。写。
你的思路是 用form做toast?我用的panel[/quote] good .....
weixin_42406391 2020-12-22
  • 打赏
  • 举报
回复
引用 14 楼 lorimoon 的回复:
var from =BaseFrom. GetFrom<ToaseFrom>(); 按以上的最终获实列方式来写。from 的东西直接设计器内拖就是了。至于具体实现的话:。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。自。。。。。。。。己。。。。。。写。
你的思路是 用form做toast?我用的panel
lorimoon 2020-12-22
  • 打赏
  • 举报
回复
var from =BaseFrom. GetFrom<ToaseFrom>(); 按以上的最终获实列方式来写。from 的东西直接设计器内拖就是了。至于具体实现的话:。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。自。。。。。。。。己。。。。。。写。
ziqi0716 2020-12-22
  • 打赏
  • 举报
回复
引用 7 楼 wanghui0380 的回复:
[quote=引用 4 楼 jhdxhj 的回复:]茴香豆的茴字的9种写法
没办法,某园子过于内卷了。所以看那园子文章的人都过于卷了。而且你还不能指出问题,你要指出问题了,绝对会被群攻。 无论是俺这里说,还是人家园子里自己说,都得会被群攻的 https://www.cnblogs.com/willick/p/14152115.html 看一下这里的评论,嘿嘿,要说真像的人,一定会被群殴。 至于这帖子,本身你不回复。我都懒得回答,就让他们自己卷死好了。 既然回复了,我们还是说说。没有上下文你讨论个啥,如果喜欢看园子的文章,那就找园子的人去玩。俺们这里只关注上下文 so,先不说啥多线程问题,就先说问题本身。你静态变量和实例有关系么?静态变量和实例没有关系,所以如果你想静态变量,根本就不需要啥“单例”,单例===全名全局唯一实例,讨论的是实例-----------设计模式放在3大类的第一类创建型模式,讨论的是怎么创建,怎么new so----------静态变量需要new一个实例么?[/quote] 又黑博客园,真没必要大胸弟
weixin_42406391 2020-12-22
  • 打赏
  • 举报
回复
也学学中英混编: by the way,都说了是Toast了,还要啥上下文....

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧