编写一个简单的工厂模式java,java工厂模式的好处
如何解决写爬虫IP受阻的问题?立即使用。
(推荐教程:java入门)
一、简单工厂模式
工厂的简单定义:提供创建对象实例的功能,不考虑其具体实现。创建的实例的类型可以是接口、抽象类或具体类。
实现汽车接口
公共接口车{
string getName();
}奔驰类
公共级奔驰执行车{
@覆盖
公共字符串getName() {
还‘奔驰’;
}
}宝马类
公共级宝马弈车{
@覆盖
公共字符串getName() {
还‘宝马’;
}
}简单工厂,既能生产宝马又能生产奔驰
公共类SimpleFactory {
公共汽车getCar(字符串名称){
if(name . equals( BMW ){
还新宝马();
} else if(name . equals( benz ){
归还新奔驰();
}否则{
System.out.println(对不起,这个牌子的车不能生产);
返回null
}
}
}测试类
公共类SimpleFactoryTest {
公共静态void main(String[] args){
simple factory simple factory=new simple factory();
Car car=simpleFactory.getCar(宝马);
system . out . println(car . getname());
}
}测试结果
按照宝马简单工厂的定义,用户只要产品,不关心产品是怎么生产的。看起来很完美。但是你想想,这个世界上有生产一切的工厂吗?
显然是不存在的。每个汽车品牌都有自己的生产工厂,自己的生产技术。映射到spring框架,我们有许多种类的bean需要生成。如果仅仅依靠一个简单的工厂来实现,有几个如果.否则,我们是否必须嵌套在工厂类中?
而且我们在代码里生产一辆车,出来的时候只是新的,实际操作的时候不知道需要进行多少操作。加载、注册等操作都会体现在工厂类中,所以这个类会变得无序,不方便管理。所以每个品牌都应该有自己的生产班。
因为专一,所以专业。这时,工厂法出现了。
二、工厂方法模式
工厂接口
//定义一个工厂接口,其功能是生产汽车。
公共接口工厂{
car getCar();
}奔驰工厂
公共类BenzFactory实现工厂{
@覆盖
公共汽车getCar() {
归还新奔驰();
}
}宝马工厂
公共类BMWFactory实现工厂{
@覆盖
公共汽车getCar() {
还新宝马();
}
}测试类
公共类工厂测试{
公共静态void main(String[] args){
factory BMW factory=new BMW factory();
system . out . println(BMW factory . get car()。getName());
factory benz factory=new benz factory();
system . out . println(benz factory . get car()。getName());
}
}测试结果
德国宝马汽车公司(Bavarian Motor Works)
根据上面的代码,奔驰可以看到不同品牌的汽车由不同的工厂生产,这似乎是完美的。但是让我们来看看测试类。当一个人想买一辆宝马车(假设没有卖家),那么他就得去宝马工厂给他生产一辆。过几天他想买一辆奔驰的车,就要去奔驰工厂请人生产,这无疑增加了用户的操作复杂度。那么有没有方便用户操作的方式呢?这就是抽象工厂出现的时候。
三、抽象工厂模式
抽象工厂
公共抽象类AbstractFactory {
受保护的抽象汽车getCar();
//这段代码是动态配置的功能。
//以固定模式委托
公共汽车getCar(字符串名称){
如果(‘宝马’。equalsIgnoreCase(name)){
返回新的BmwFactory()。getCar();
}else if(奔驰。equalsIgnoreCase(name)){
返回新的BenzFactory()。getCar();
}else if(奥迪)。equalsIgnoreCase(name)){
返回新的AudiFactory()。getCar();
}否则{
System.out.println(此产品无法生产);
返回null
}
}
}默认工厂
公共类DefaultFactory扩展AbstractFactory {
private Audi factory default factory=new Audi factory();
公共汽车getCar() {
返回default factory . get car();
}
}宝马工厂
公共类BMWFactory扩展AbstractFactory {
@覆盖
公共汽车getCar() {
还新宝马();
}
}奔驰工厂
公共类BenzFactory扩展AbstractFactory {
@Override public Car getCar() {
归还新奔驰();
}
} 测试类
公共类AbstractFactoryTest {
公共静态void main(String[] args) {
default factory factory=new default factory();
system . out . println(factory . get car( Benz )。getName());
}
}测试结果
根据上面的代码,奔驰可以看到用户需要一辆车,只需要找到默认工厂提出自己的要求(来车参数)就可以得到自己想要的产品,而不需要根据产品寻找不同的生产工厂,方便用户操作。
注:对于设计模式,有人嗤之以鼻,有人奉若神明,但我是认可的。
根据我肤浅的理解,设计模式的经典特征是,它解决了写代码的人和调用代码的人双方的痛苦。不同的设计模式只适用于不同的场景。至于用不用,怎么用,就需要注意了。
但不应该为了用而用。细微之处留给大家慢慢品味。
更多编程知识请访问:编程课程!java的以上三种工厂模式是什么?更多详情请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。