设计模式-01 工厂模式

1 简单工厂
隐藏具体产品的创建过程。

类图
这里写图片描述
对于客户端 来说不需要了解车具体的创建过程。只需要把相应的车型传给CarFactory.

//抽象车 
public abstract class Car {

}
//具体的车 奥迪
public class AoDiCar extends Car{

}
//具体的车 宝马
public class BaoMaCar extends Car {

}
//具体的车 大众
public class DaZhongCar extends Car {

}
//汽车工厂类
public class CarFactory {

    public static final int CAR_BAOMA = 1;
    public static final int CAR_DAZHONG = 2;
    public static final int CAR_AODI = 3;

    public Car createCar(int type) {
        switch (type) {
        case CAR_BAOMA:
            return new BaoMaCar();
        case CAR_DAZHONG:
            return new DaZhongCar();
        case CAR_AODI:
            return new AoDiCar();
        default:
            return new AoDiCar();
        }
    }
}
//客户端
public class Client {
    public static void main(String[] args) {
        CarFactory carFactory = new CarFactory();
        carFactory.createCar(CarFactory.CAR_BAOMA);
    }
}

2 工厂方法
类图
这里写图片描述

使用场景
比如长城的汽车在中国卖的越来越好。那么对于两款车长城C50和哈弗h6的制造工厂生产这两款车的轮胎大小和发动机型号会有所不同。C50工厂只能生产16寸轮胎和1.5T发动机。而H6工厂只能生产20寸轮胎和2.0发动机 。

下面是代码

抽象工厂

public abstract class CarFactory {
    /**
     * 生产轮胎
     * @return
     */
    public abstract ITire createTire();

    /**
     * 生产发动机
     * @return
     */
    public abstract IEngine createEngine();
}

具体工厂

/**
 *长城C50工厂
 */
public class C50Factory extends CarFactory{

    public ITire createTire() {
        return new Inch16Tire();
    }

    public IEngine createEngine() {
        return new T1Dot6Engine();
    }

}
/**
 * 具体工厂 哈弗H6工厂
 */
public class H6Factory extends CarFactory {

    public ITire createTire() {
        return new Inch20Tire();
    }

    public IEngine createEngine() {
        return new T2Dot0Engine();
    }

}

抽象产品

public interface IEngine {
    /**
     * 发动机
     */
    void engine();
}
public interface ITire {
    /**
     * 轮胎
     */
    void tire();
}

具体产品

/**
 *1.5排量的发动机
 */
public class T1Dot6Engine implements IEngine{

    public void engine() {
        System.out.println("1.5T小排量发动机");
    }

}
/**
 *2.0T发动机
 */
public class T2Dot0Engine implements IEngine {

    public void engine() {
        System.out.println("2.0T排量发动机");
    }

}
/**
 * 16英寸轮胎
 *
 */
public class Inch16Tire implements ITire {

    public void tire() {
        System.out.println("16英寸轮胎");
    }

}
/**
 *20英寸轮胎
 */
public class Inch20Tire implements ITire{

    public void tire() {
        System.out.println("20英寸轮胎");
    }

}

客户类

public class Client {
    public static void main(String[] args) {
        System.out.println("长城C50工厂生产的产品=============");
        CarFactory factoryC50  = new C50Factory();
        factoryC50.createEngine().engine();
        factoryC50.createTire().tire();


        System.out.println("哈弗H6工厂生产的产品===============");
        CarFactory factoryH6 = new H6Factory();
        factoryH6.createEngine().engine();
        factoryH6.createTire().tire();

    }
}

打印结果
长城C50工厂生产的产品=============
1.5T小排量发动机
16英寸轮胎
哈弗H6工厂生产的产品===============
2.0T排量发动机
20英寸轮胎

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值