Java Factory概念学习第一课 (单例、多例)

Java Factory概念学习第一课 (单例、多例)

单例的概念

对于一个Car类:

public class Car{

    public void run(){

       System.out.println("汽车突突突地跑");

    }

}

另一个类来获得Car,也就是实例化这个Car,:

public class Test{

     public static void main(String[] args){

          Car car = new Car();

          car.run();

     }

}

此时对于Car类来说,本身并不能限制谁可以或者不可以实例化。此时我们可以这样做:

public class Car{

    private Car(){}

    public Car getInstance(){

        return new Car();

    }

    public void run(){

       System.out.println("汽车突突突地跑");

    }

}

将构造方法声明为私有,那么Test类只能通过getInstance来实例化Car对象,那么我们就可以在getInstance方法里加入验证和限制来进行约束。

现在,Car类本身并不能控制或者限制Test类示例几个Car对象,假设我们限制只能获得一台车,那么可以这样做:

public class Car{

    private Car(){}

    private static Car car = new Car()public Car getInstance(){

        return car;

    }

    public void run(){

       System.out.println("汽车突突突地跑");

    }

}

那么,无论Test类调用多少次getInstance方法,都只会返回同一个car。

public class Test{
  public static void main(String[] args){
    Car c = Car.getInstance();
    Car c2 = Car.getInstance();
    System.out.println(c == c2);
  }
}

结果输出为true,即两个对象c和c2指向同一个地址,即只有一辆小汽车被分配。

这是单例。

多例的概念

自然而然的,我们可以解除只能获得一台车的限制,但是还是要在控制之下完成对象的实例化。

这里我们可以使用多例的办法,在单例的基础上修改一下

public class Car{

    private Car(){}

    private static List<Car> carList = new ArrayList<>();

    for(int i = 0; i < 5; i ++){

       carList.add(new Car());

    }

    public Car getInstance(){

        return carList.get();

    }

    public void run(){

       System.out.println("汽车突突突地跑");

    }

}

这样Test类依旧只需要调用getInstance就可以获得实例了。

这就是多例。

下一篇:一般factory

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值