设计模式——工厂模式

        工厂模式是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();
    }

}

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

你可能感兴趣的:(设计模式,设计模式,java,开发语言)