简单工厂代码



import java.text.DateFormat;
import java.text.NumberFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;

import org.junit.Test;

/**
 *--------唯有专注才能深入,唯有厚积才会薄发---------
 *  本类介绍:
 *  @author :   木木老师
 *  @Time   :   2017年7月27日     下午7:13:25
 *  @QQ     :   1349211393
 */

public class SimpleFactoryDemo {
	@Test
	protected void method1() {
		//介绍几个简单工厂案例。
		DateFormat dateFormat=DateFormat.getInstance();
		Date date=new Date();
		System.out.println(dateFormat.format(date)+"\n");
		
		/*
		 * Java开发者对java.util.Date 笨拙的设计,忍耐以及达到了极限了。
		 * Java 8.0带来了全新的日期和时间的API,
		 * 在java.time包中引入了一系列有用的新的类。
		 * 如:LocatDate ,LocalTime和LocalDateTime等等,
		 * 解决了哪些久被诟病的问题。
		 */
		
		//这些都是一个工厂方法。你可以点击源码去看。
		System.out.println(LocalDate.now());
/*	    
    public static LocalDate now() {
        return now(Clock.systemDefaultZone());
    }
	  
	    
	    静态:每个类只有一个静态域,但是静态域中可以有多个静态的变量。而每个对象对于所有的实例域都有一份自己的拷贝。
	    这个域中出现的所有的变量都是共有的。静态变量使用很少,静态常量使用很多,也是这个原因。静态变量的数据是可变的。
	    如果创建了大量的对象,难道该类的所有对象都要进行数据变化吗?
	    经常使用的数据,我们经常会把它当成静态常量或者做成枚举类。
	    
	一.   静态方法的: 优点
	1.使用静态工厂方法对比构造方法,构造方法 的缺陷,必须要和类名相同,无法重新命名。
    所以.静态工厂方法就可以重新命名,更加易于我们来理解代码。
	2.静态工厂方法在每次调用的时候不要求创建一个新的对象。
    这种做法对于一个要频繁创建相同对象的程序来说,可以极大的提高性能。
    它使得一个类可以保证是一个singleton;他使非可变类可以保证“不会有两个相等的实例存在”。
     静态工厂本身就是属于类的,每个对象的拷贝都原来的那一份数据。绝对是一个单例。
	3.静态工厂方法在选择返回类型时有更大的灵活性。
    使用静态工厂方法,可以通过调用方法时使用不同的参数创建不同类的实例,
     还可以创建非公有类的对象,这就封装了类的实现细节。
     
             二.   静态方法的: 缺点
    1.如果一个类是通过静态工厂方法来取得实例,并且该类的构造函数都不是公有的或者保护的(非public,protected)即default和private,当
    你的方法是default和private的,我的子类是无法访问的。
    
    参考资料:
      访问权限定义了:        类			    包			  子类			   其他包                      的访问权限。
  public       OK            OK          OK           OK
  protected    OK            OK          OK           NO 
  》》》》关注一下,下面的2种:
  default      OK            OK          NO           NO 
  private      OK            NO          NO           NO  
     
         那该类就不可能有子类(被继承),子类的构造函数需要首先调用父类的构造函数,
         因为父类的构造函数是private的,所以即使我们假设继承成功的话,
         那么子类也根本没有权限去调用父类的私有构造函数,所以是无法被继承的。
    
    2.毕竟通过构造函数创建实例还是SUN公司所提倡的,
     静态工厂方法跟其他的静态方法区别不大,这样创建的实例谁又知道这个静态方法是创建实例呢?
      弥补的办法就是:静态工厂方法名字使用valueOf或者getInstance.
      总结:静态工厂方法和公有的构造函数都有他们各自的用途,我们要理解他们各自的长处,
      避免一上来就用构造函数,通常静态工厂更加合适。如果没有其他因素强烈的影响我们的选择,最好还是简单的选择构造函数,毕竟他是语言提供的规范。
	    */

		System.out.println(LocalDateTime.now().hashCode());
		System.out.println(LocalDateTime.now().hashCode());
		System.out.println(LocalDateTime.now());
		System.out.println(LocalDateTime.now());
		System.out.println(LocalDateTime.now());
/*
   public static LocalDateTime now() {
        return now(Clock.systemDefaultZone());
    }
*/
		
		NumberFormat numberFormat=NumberFormat.getInstance();
		NumberFormat PercentFormat=NumberFormat.getPercentInstance();
		double num=2.3;
		System.out.println(numberFormat.format(num)+"\n"+PercentFormat.format(num));
	}
}

	

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值