java中的三种工厂模式_Java中的三种工厂模式

/**

* 设计模式之工厂模式,用户创建对象的,通过工厂模式来降低代码的耦合度

* @author

*/

//简单工厂模式

public class SimpleFactory{

/**

* 根据不过的String参数 name返回不同的汽车对象name

* @param name

* @return

*/

public Car getCar(String name){

/*

* 利用equals()方法的特性:对于任何非空引用值x,x.equals(null)

* 都应返回false

* "name"是一个非空的String对象,也就是任何一个非空引用值x

*/

if(name.equals("BenZ")){

return new BenZ();

}else if(name.equals("QQ")){

return new QQ();

}else{

System.out.println("工厂没有这种车型");

return null;

}

}

}

public interface Car {

//汽车接口   用来实现

String getName();

}

public class BenZ implements Car {

//实现汽车接口

@Override

public String getName(){

return "BenZ";

}

}

public class BWM implements Car{

//实现汽车接口

@Override

public String getName(){

return "BWM";

}

}

public class SimpleFactoryTest {

public static void main(String[] args){

//简单工厂的测试类

SimpleFactory simpleFactory = new SimpleFactory();

Car car = simpleFactory.getCar("BenZ");

System.out.println(car.getName());    //BenZ

}

}

//工厂方法

工厂方法使用一个抽象工厂角色作为核心来代替在简单工厂模式中使用具体类作为核心。虽然使用工厂方法模式足以应付我们可能遇到的大部分业务需求。但是当产品种类非常多时,就会出现大量的与之对应的工厂类,这不应该是我们所希望的。

最好就是使用简单工厂模式与工厂方法模式相结合的方式来减少工厂类:即对于产品树上类似的种类(一般是树的叶子中互为兄弟的)使用简单工厂模式来实现。

在某些时候对于系统中存在不同的产品树,而且产品树上存在产品族,那么这种情况下就可能可以使用抽象工厂模式了。

//定义一个工厂类的接口 接口就是生产汽车 其他负责调用

public interface Factory{

Car getCar();

}

public interface Car {

//汽车接口   用来实现

String getName();

}

public class BWMFactory implements Factory{

//实现汽车接口

@Override

public Car getCar(){

return new BWM();

}

}

public  class BenZFactory implements Factory {

//实现工厂接口

@Override

public Car getCar(){

return new BenZ();

}

}

public  class BenZ implements Car{

//实现汽车接口

public String getName() {

return "BenZ";

}

}

public  class BWM implements Car{

//实现汽车接口

public String getName() {

return "BWM";

}

}

public class FactoryTest {

public static void main(String[] args){

//工厂的测试类

Factory bwmFactory = new BWMFactory();

System.out.println(bwmFactory.getCar().getName());   //BWM

Factory benzFactory = new BenZFactory();

System.out.println(benzFactory.getCar().getName());     //BenZ

}

}

//抽象工厂

//定义一个抽象工厂类的接口

public abstract class AbstractFactory{

protected abstract Car getCar();

//动态配置

public Car getCar(String name){

if("BWM".equals(name)){

return new BWMFactory().getCar();

}else if("BenZ".equals(name)){

return new BenZFactory().getCar();

}else{

System.out.println("工厂生产不了这种车型");

return null;

}

}

}

public interface Car {

//汽车接口   用来实现

String getName();

}

public  class BWM implements Car{

//实现汽车接口

public String getName() {

return "BWM";

}

}

public  class BenZ implements Car{

public String getName() {

return "BenZ";

}

}

public class BWMFactory extends AbstractFactory{

//实现汽车接口

@Override

public Car getCar(){

return new BWM();

}

}

public  class BenZFactory extends AbstractFactory {

//实现工厂接口

@Override

public Car getCar(){

return new BenZ();

}

}

public class DefaultFactory extends AbstractFactory {

private AudiFactory defaultFactory = new AudiFactory();

public Car getCar(){

return defaultFactory.getCar();

}

}

public class AbstractFactoryTest {

public static void main(String[] args){

//工厂的测试类

DefaultFactory factory = new DefaultFactory();

System.out.println(factory.getCar("BWM").getName());   //BWM

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值