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. 从本质上来讲,抽象工厂,工厂模式是统一的。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值