设计模式-5.工厂方法模式

定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法时一个类的实例化延迟到其子类。

使用场景:

第一种情况,对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体工厂,生产出具体的产品来。Java Collection中的iterator() 方法即属于这种情况。

第二种情况,创建对象的任务由多个具体子工厂中的某一个完成,而抽象工厂只提供创建产品的接口。

第三种情况,客户端不需要知道对象的创建细节。

实现:一个抽象产品类,多个具体产品实现类,一个抽象工厂类,只有一个实例化产品类的方法,多个具体工厂实现类负责实例化不同的具体产品类。

优点:符合开闭原则,封装对象创建过程,使用继承和多态易扩展易维护。

代码示例:每个男人都有个豪车梦,但仅仅是个梦,我就不一样,我可以new一堆出来。利用工厂方法模式实现生产不同品牌的汽车

/**
 * 抽象汽车类
 * @author liuhao
 *
 */
public abstract class Car {
    
    /**
     * 品牌
     */
    protected String brand;
    
    
    public Car(String brand) {
        this.brand = brand;
    }

    //开车
    public void run() {
        System.out.println("开着我的"+brand+"上路啦!");
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }
}

/**
 * 汽车具体实现类-法拉利
 * @author liuhao
 *
 */
public class Ferrari extends Car {

    public Ferrari(String brand) {
        super(brand);
    }
    
}
 

/**
 * 汽车具体实现类-奔驰
 * @author liuhao
 *
 */
public class Mercedes extends Car {
    
    public Mercedes(String brand) {
        super(brand);
    }
}
/**
 * 汽车工厂抽象父类
 * @author liuhao
 *
 */
public abstract class CarFactory {
    
    /**
     * 提供生产汽车的方法
     * @return 汽车实例
     */
    public abstract Car produceCar();
}

/**
 * 法拉利汽车工厂
 * @author liuhao
 *
 */
public class FerrariFactory extends CarFactory {

    @Override
    public Car produceCar() {
        return new Ferrari("法拉利");
    }

}

/**
 * 奔驰汽车工厂
 * @author liuhao
 *
 */
public class MercedesFactory extends CarFactory {

    @Override
    public Car produceCar() {
        return new Mercedes("大奔");
    }

}

输出结果:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值