静态工厂方法代替构造器

构造器创建对象示例

public Boolean(String b)
{
		this.toBoolean(b);
}

//创建对象
Boolean b = new Boolean("true");

静态工厂模式创建对象示例

public static Boolean valueOf(String s) 
{
        return toBoolean(s) ? TRUE : FALSE;
}
// 创建对象
Boolean b = Boolean.valueOf("true");

使用静态工厂方法体构造器的优点

  • 静态工厂方法有方法名,可读性强

构造方法可以有多个,但构造方法没有方法名,只能根据不同的参数列表确定的到的实例。但不查询文档基本上无法确定不同构造方法的作用

静态工厂方法也能有多个,但可以根据规范的方法名确定某个方法的用途。

public class MaxAndMin
{
    /**
     * 最小值
     */
    private int min = Integer.MIN_VALUE;
    
    /**
     * 最大值
     */
    private int max = Integer.MAX_VALUE;
    
    /**
     * 大于min 小于max
     * 
     * @param min
     * @param max
     */
    
    public MaxAndMin(int min, int max)
    {
        this.min = min;
        this.max = max;
    }
    
    public MaxAndMin(int min)
    {
        this.min = min;
    }
    
    /**
     * 大于min 小于max
     * 
     * @param min
     * @param max
     */
    public static MaxAndMin between(int min, int max)
    {
        return new MaxAndMin(min, max);
    }
    
    /**
     * 大于min 小于Integer.MAX_VALUE
     * 
     * @param min
     */
    public static MaxAndMin biggerThan(int min)
    {
        return new MaxAndMin(min, Integer.MAX_VALUE);
    }
    
    /**
     * 大于Integer.MIN_VALUE 小于max
     * 
     * @param max
     */
    public static MaxAndMin smallerThan(int max)
    {
        return new MaxAndMin(Integer.MIN_VALUE, max);
    }
}
  • 静态工厂方法调用时不需要实例化对象
//使用构造器
MaxAndMin  maxAndMIn = new MaxAndMin (1,10);
//使用静态工厂方法
MaxAndMin  maxAndMIn = MaxAndMin.between(1,10);
  • 静态方法可以放回元返回类型的所有子类
    public static Dog getInstance()
    {
        return new RedDog();//或者return new BlackDog();
    }
  • 静态方法代码更加简洁
class TestMap<K, V>
{
    public TestMap()
    {
        
    }
    
    public static <K, V> TestMap<K, V> newInstance()
    {
        return new TestMap<K, V>();
        
    }
    
}

// 调用构造方法
 TestMap<String, String> map1 = new TestMap<String, String>();
//更加简洁,不需要重复指明类型参数,可以自行推导出来
 TestMap<String, String> map2 = TestMap.newInstance();

使用静态工厂方法的缺点

  • 如果类不含public或protect的构造方法,将不能被继承;

可被继承:

class TestMap<K, V>
{
    public TestMap()
    {
        
    }
    
    public static <K, V> TestMap<K, V> newInstance()
    {
        return new TestMap<K, V>();
        
    }
    
}

不可以被继承:

class TestMap<K, V>
{
    privateTestMap()
    {

    }

    public static <K, V> TestMap<K, V> newInstance()
    {
        return new TestMap<K, V>();

    }

}
  • 与其它普通静态方法没有区别,没有明确的标识一个静态方法用于实例化类
    一般一个静态工厂方法需要有详细的注释,遵守标准的命名,如使用getInstance、valueOf、newInstance等方法名;

静态工厂方法和工厂方法模式的区别

  • 静态工厂方法:是某个类里的静态方法,通过调用该静态方法可以得到属于该类的一个实例
  • 工厂方法模式:是一种设计模式,指的是让具体的工厂对象负责生产具体的产品对象,这里涉及多种工厂(类),多种对象(类),如内存工厂生产内存对象,CPU工厂生产CPU对象
  • 如果要说相似的话,静态工厂方法跟简单工厂模式倒有那么点像,不过区别也挺大,简单工厂模式里的静态工厂方法会创建各种不同的对象(不同类的实例),而静态工厂方法一般只创建属于该类的一个实例(包括子类);

原文链接:https://www.cnblogs.com/chenpi/p/5981084.html

内容概要:本文详细介绍了扫描单分子定位显微镜(scanSMLM)技术及其在三维超分辨体积成像中的应用。scanSMLM通过电调透镜(ETL)实现快速轴向扫描,结合4f检测系统将不同焦平面的荧光信号聚焦到固定成像面,从而实现快速、大视场的三维超分辨成像。文章不仅涵盖了系统硬件的设计与实现,还提供了详细的软件代码实现,包括ETL控制、3D样本模拟、体积扫描、单分子定位、3D重建和分子聚类分析等功能。此外,文章还比较了循环扫描与常规扫描模式,展示了前者在光漂白效应上的优势,并通过荧光珠校准、肌动蛋白丝、线粒体网络和流感A病毒血凝素(HA)蛋白聚类的三维成像实验,验证了系统的性能和应用潜力。最后,文章深入探讨了HA蛋白聚类与病毒感染的关系,模拟了24小时内HA聚类的动态变化,提供了从分子到细胞尺度的多尺度分析能力。 适合人群:具备生物学、物理学或工程学背景,对超分辨显微成像技术感兴趣的科研人员,尤其是从事细胞生物学、病毒学或光学成像研究的科学家和技术人员。 使用场景及目标:①理解和掌握scanSMLM技术的工作原理及其在三维超分辨成像中的应用;②学习如何通过Python代码实现完整的scanSMLM系统,包括硬件控制、图像采集、3D重建和数据分析;③应用于单分子水平研究细胞内结构和动态过程,如病毒入侵机制、蛋白质聚类等。 其他说明:本文提供的代码不仅实现了scanSMLM系统的完整工作流程,还涵盖了多种超分辨成像技术的模拟和比较,如STED、GSDIM等。此外,文章还强调了系统在硬件改动小、成像速度快等方面的优势,为研究人员提供了从理论到实践的全面指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值