设计模式三单例模式:边学边做个生成电子书的工具(python+dart)

123 阅读1分钟

意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 主要解决:一个全局使用的类频繁地创建与销毁。 何时使用:当您想控制实例数目,节省系统资源的时候。 如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建

python实现



class Slog:
    instance = None
    def __new__(cls, *args, **kwargs):
        print("Singleton log system by Garry Guo newing")
        if(cls.instance == None):
            cls.instance = object.__new__(cls)
            return cls.instance

        else:
            return cls.instance
    def __init__(self,format):
        print(" init  method called  ")
        self.format = format



slog1 = Slog("txt")
slog2 = Slog("screen")
print(slog1.format)
print(slog2.format)
print(id(slog1))
print(id(slog2))

截图

image.png

dart 实现

main(List<String> args) {
  var s1 = Slog();
  s1.format = "screen";
  var s2 = Slog();
  s2.format = "txt";
  print(s1.format);
  print(s2.format);
  print(identical(s1, s2));
  print(s1 == s2);
}

class Slog {
  // 单例
  static final Slog _instance = Slog._();
  // 私有构造器
  Slog._();
  String format = "";
  // 工厂方法
  factory Slog() {
    return _instance;
  }
}


实现截图

image.png