java web简单工厂模式_简单工厂和工厂方法模式Java示例

版权声明:此文章转载自_infocool

原文链接:http://www.infocool.net/kb/Java/201610/204014.html

如需转载请联系听云College团队成员小尹 邮箱:yinhy#tingyun.com

简单工厂和工厂方法模式都是将对象的创建交由工厂处理,运用了工厂方法模式,我们代码中的if else被不同类型的具体工厂类所取代,这样在增加新的产品的时候不用修改原来的代码, 增加了可维护性。 当然这样做的后果就是项目中多了很多的类和接口, 增加了系统复杂性。简单工厂中的角色包括:

角色

工厂类

抽象产品

具体产品

具体产品实现抽象产品接口。重写抽象产品中的抽象方法,是其具有具体产品自己的方法特征,每个具体的产品由同一个工厂类创建。先看一下每个角色的代码实现

工厂类:Factory.javapackage com.songpu.dp.factory;

public class Factory  {

public Food createFood(){

return new Food();

}

public Toy createToy(){

return new Toy();

}

}

抽象产品:Product.javapackage com.songpu.dp.factory;

public interface Product {

public void operatet();

}

具体产品:Toy.java和Food.javapackage com.songpu.dp.factory;

public class Toy implements Product{

@Override

public void operatet() {

System.out.println("play toy");

}

}

package com.songpu.dp.factory;

public class Food  implements Product{

@Override

public void operatet() {

System.out.println("eat food");

}

}

测试一下package com.songpu.dp.test;

import com.songpu.dp.factory.*;

import static org.junit.Assert.*;

import org.junit.Test;

public class testFactory {

@Test

public void test() {

Factory f = new Factory();

Product food;

Product toy;

food = f.createFood();

toy=f.createToy();

food.operatet();

toy.operatet();

}

最后的执行结果如下

0c3603cf7b9606d1cb378a07930710c3.png

在简单工厂中,如果需要增加一个产品的创建,就必须在工厂类中增加创建产品的代码,这不符合设计模式中的开闭原则(一个软件实体应该通过扩展来实现变化,而不是通过修改已有代码来实现变化),所以工厂方法模式就是对简单工厂的改进,增加一个抽象工厂的角色,可以通过实现该抽线工厂来扩展具体工厂类。

这里代码的改动就是在增加了抽象工厂,具体工厂类实现抽象工厂,并且每个具体的产品由响应的一个工厂类创建。

角色

抽象工厂

具体工厂类

抽象产品

具体产品类

抽象工厂:Factory.javapackage com.songpu.dp.factorymethod;

public interface Factory {

public Product createProduct();

}

具体工厂类:FoodFactory.java和ToyFood.javapackage com.songpu.dp.factorymethod;

public class FoodFactory implements Factory {

@Override

public Product createProduct() {

return new Food();

}

}package com.songpu.dp.factorymethod;

public class ToyFactory implements Factory {

@Override

public Product createProduct() {

return new Food();

}

抽象产品:Product.java与具体产品类:Food.java和Toy.java的代码和上面的一致。

测试一下package com.songpu.dp.test;

import com.songpu.dp.factorymethod.*;

import static org.junit.Assert.*;

import org.junit.Test;

public class testProductMethod {

@Test

public void test() {

FoodFactory ff = new FoodFactory();

ToyFactory tf = new ToyFactory();

Product food;

Product  toy;

food = ff.createProduct();

toy = tf.createProduct();

food.operate();

toy.operate();

}

}

最后执行的结果如下

4148a7ee494c7b419f85f84fae0ff96b.png

想阅读更多技术文章,请访问听云技术博客,访问听云官方网站感受更多应用性能优化魔力。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值