Java设计模式之工厂模式(简单工厂、工厂模式)

简单工厂模式

以小汽车为例实现简单工厂模式
定义小汽车的接口,由于工厂模式仅关系对象的创建,所以无需定义具体方法。

package com.xzy.simpleFactory;

public interface ICar {
    
    
    //定义小汽车接口
}
package com.xzy.simpleFactory;

public class UpCar implements ICar {
    
    
    //高档汽车的实现
}
package com.xzy.simpleFactory;

public class MidCar implements ICar {
    
    
    //中档汽车的实现
}
package com.xzy.simpleFactory;

public class DownCar implements ICar {
    
    
    //低档汽车的具体实现
}

创建小汽车的工厂,用于创建三种小汽车

package com.xzy.simpleFactory;

public class CarSimpleFactory {
    
    
    public static final String UPTYPE = "uptype";
    public static final String MIDTYPE = "midtype";
    public static final String DOWNTYPE = "downtype";

    public static ICar create(String type) {
    
    
        ICar obj = null;
        if (type.equals(UPTYPE)) {
    
    
            //创建高档汽车
            obj = new UpCar();
        }else if(type.equals(MIDTYPE)){
    
    
            //创建中等汽车
            obj = new MidCar();
        }else if(type.equals(DOWNTYPE)){
    
    
            //创建低档汽车
            obj = new DownCar();

        }
        //返回创建好的对象
        return obj;
    }
}

编写测试类进行测试

package com.xzy.simpleFactory;

import org.junit.Test;

public class SimpleFactoryTest {
    
    
    @Test
    public void test(){
    
    
        //传入需要创建的对象类型
        ICar car = CarSimpleFactory.create(CarSimpleFactory.MIDTYPE);
        System.out.println(car.getClass());

    }
}

运行结果不再展示。

简单工厂的特点
  1. 他是一个具的类,非接口或抽象类。
  2. 如要新增高档小汽车的类型,需要编写高档小汽车的实现,并且需要修改工厂类的create方法。

工厂模式

定义小汽车接口和三种小汽车的实现与简单工厂的定义相同。

定义抽象工厂

package com.xzy.Factory;

public abstract class AbstractFactory {
    
    
    //定义抽象工厂,具有子工场的共同特性
    public abstract  ICar create();
}

定义具体的子工厂

package com.xzy.Factory;

public class UpFactory extends AbstractFactory {
    
    
    @Override
    public ICar create() {
    
    
        return new UpCar();
    }
}

*****************************************

package com.xzy.Factory;

public class MidFactory extends AbstractFactory {
    
    
    @Override
    public ICar create() {
    
    
        return new MidCar();
    }
}

******************************************

package com.xzy.Factory;

public class DownCarFactory extends AbstractFactory {
    
    
    @Override
    public ICar create() {
    
    
        return new DownCar();
    }
}

编写测试类

package com.xzy.Factory;

import org.junit.Test;

public class AbstractFactoryTest {
    
    
    @Test
    public void test(){
    
    
        AbstractFactory obj = new UpFactory();

        ICar car = obj.create();

        System.out.println(car.getClass());
    }
}

运行结果

class com.xzy.Factory.UpCar

Process finished with exit code 0

抽象工厂

  1. 一般来说,工厂模式,简单工厂是单产品系的,而抽象工厂是多产品系的。
  2. 从本质上来讲,抽象工厂,工厂模式是统一的。

猜你喜欢

转载自blog.csdn.net/weixin_42643321/article/details/107957885