Flutter学习笔记—命名构造方法、常量构造方法、工厂构造方法

111 阅读1分钟

命名构造方法

class Person{
    String userName;
    int age;

    Person(this.userName,this.age);

    //命名构造方法
    Person.fromData(Map date){
        this.userName = data['name'];
        this.age = data['age'];
    }
    //使用命名构造方法创建对象
    void main(){
        var p = new Person.fromData({
            "name":"baby";
            "age":"12"
        });
        print(p.userName);
    }
}

常量构造方法

class ConstPoint{
    final num x;
    final num y;
    //使用const构造方法
    const ConstPoint(this.x,this.y); 
    //编译时常量对象,需使用const来创建对象
    static final ConstPoint origin = const ConstPoint(1,5);
}
void main(){
    print(ConstPoint.origin.x);
    print(ConstPoint.origin.y);
}
//1  5

工厂构造方法

class Logger{
    final String name;
    //创建一个静态Map做为缓存
    static final Map<String,Logger> cache = <String,Logger>{};

    //定义一个命名构造方法,用下划线 _ 修饰,将构造方法私有化
    Logger._internal(this.name);

    //使用关键字factory修饰类同名构造方法
    factory Logger(String name){
        if(_cache.containsKey(name)){
            return _cache[name];
        }else{
            //调用命名构造方法创建新对象
            final logger = new Logger._internal(name);
            _cache[name] = logger;
            //存入缓存
            return logger;
        }
    }
}

void main(){
    var uiLog = new Logger('UI');
    var eventLog = new Logger('event');
    var uiLog2 = new Logger('UI');
}