设计模式——工厂模式

        工厂模式是Java中常用的设计模式,提供了一种创建对象的最佳方式,工厂模式是将对象实例化的过程封装在了工厂类中,然后对外提供一个方法用来获取对象

1.简单工厂模式

        简单工厂不属于设计模式之一,因为它没有遵守开闭原则,实现方式就是在工厂类里面不断进行拓展,比如我们有一个汽车接口,我们如果要获得各种品牌汽车时,就从汽车工厂类中获取,如下:

public interface Car {

      void run();

}
public class Aodi implements Car{

    @Override
    public void run() {
        System.out.println("奥迪汽车行驶");
    }
}
/*
 汽车工厂
 */
public class CarFactory {

     public static Car createCar(String name){
            if(name.equals("aodi")){
                Aodi aodi = new Aodi();
                //aodi.
                return aodi;
            }
            if(name.equals("bmw")){
                return new Bmw();
            }
            if(name.equals("bc")){
                 return new BC();
            }
            return null;
     }
}

        优点:实现简单,适用于实现类少,扩展少的情况。

        缺点:如果增加和修改产品,则需要修改工厂类,违背了开闭原则,如果扩展多,实现类多的情况下,会造成工厂类十分庞杂,不利于维护。

2.工厂方法模式

        工厂方法模式对工厂也进行了抽象,然后再向下拓展出各种工厂,比如有一个汽车工厂接口,拓展出的工厂类就有奥迪汽车工厂类,大众汽车工厂类...,它们里面都只负责造自己的汽车。

如下:

public interface CarFactory {

       Car createCar();

}
public class AodiFactory implements  CarFactory{

    @Override
    public Car createCar() {
        return new Aodi();
    }
    
}

        优点:符合开闭原则,每个品牌的汽车有自己的汽车工厂,代码结构清楚,拓展性好,有利于后期维护。

        缺点:需要编写额外的代码,如果一个品牌的产品过多会有很多的工厂,比如奥迪汽车工厂,奥迪LED灯工厂...

3.抽象工厂模式

         抽象工厂模式就是设计出品牌工厂,比如奥迪工厂,工厂内部既可以生产奥迪汽车,也可以生产奥迪LED灯...如下:

public interface Factory {

       Car getCar();
       LED getLed();

}
public class AodiFactory implements  Factory{

    @Override
    public Car getCar() {
        return new AodiCar();
    }

    @Override
    public LED getLed() {
        return new LED();
    }

}

        优点:同一品牌下的产品直接在对应品牌工厂中获取相应的产品,不用在创建出同一品牌下的多个产品工厂了,提高代码的健壮性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值