首页 > 编程知识 正文

抽象工厂和建造者模式各自的优点(工厂方法模式考虑的哪些问题)

时间:2023-05-05 05:41:57 阅读:2156 作者:4083

工厂模式相当于创建新的实例对象。我们经常需要根据Class类生成实例对象,比如A a=new A()。工厂模式也用于创建实例对象。它可能会做更多的工作,但它会为您的系统带来更大的可扩展性和最小的修改。

示例类作为一个示例,您想要创建一个示例:的实例对象。

样本样本=新样本();

但是实际情况是,我们在创建样例实例时通常会做一些初始化工作,比如赋值查询数据库等等。

首先,我们认为可以使用Sample的构造函数,这样生成的实例就写成了:

样本样本=新样本(参数);

但是,如果在创建示例实例时完成的初始化工作不像赋值那么简单,那么它可能是一段很长的代码。如果它也被写入构造函数,你的代码会很难看。

如果初始化工作是一段很长的代码,这意味着有很多工作要做。把大量的工作放在一个方法中相当于把大量的鸡蛋放在一个篮子里,这是非常危险的。这也违背了Java面向对象的原则。面向对象的封装和委托告诉我们尽可能地将长代码“切割”到每个片段中。再次“封装”每一个片段(减少片段之间的耦合关系),这样风险就会分散,如果以后需要修改,只要每一个片段发生变化,就不会再发生。

我们需要将创建实例的工作与使用实例的工作分开,也就是说,将创建实例所需的大量初始化工作与Sample的构造函数分开。

你认为如果有多个相似的类,我们需要实例化多个类。这使得代码管理过于复杂。

这时,可以使用工厂方法来封装这个问题。

您不能使用上面简单新示例(参数)。同样,如果Sample有一个继承,比如MySample,根据面向接口的编程,我们需要将Sample抽象成一个接口。现在Sample是一个接口,有两个子类MySample和HisSample。

sample my sample=new Mysample();

sample his sample=new his sample();

出厂包装:

公共级工厂

公共静态样本创建器(int ){ 0

//getClass生成Sample。通常,动态类加载可以用来加载类。

if(哪==1)

返回新的SampleA();

否则如果(哪==2)

返回新的SampleB();

}

}

然后,在您的程序中,如果您想要实例化Sample,请使用

样本a=工厂.创建者(1);

举一个更实际的例子,例如,您编写了一个使用数据库封装的应用程序。您的应用程序将来可以在不同的数据库环境中运行,可能是oracle、db2、sql server等。那么连接数据库的代码就不一样了。如果使用传统的方法,就要修改代码以适应不同的环境,这是非常麻烦的,但是如果使用factory类,所有可能的数据库连接都是在factory类中实现的,通过修改您的配置文件来连接不同的数据库,所以以后做迁移的时候就不需要修改代码了。

我通常使用xml配置文件来配置多种类型的数据库连接,这非常方便。PS:工厂模式在这方面应用比较广泛。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。