工厂方法模式

工厂方法模式示例


       工厂方法模式(FACTORY METHOD) 是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用合方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂,具体工厂,抽象产品,具体产品。这段文字是从百度百科上copy过来的。

1、抽象工厂
public interface FactoryCar {
    Car createCar();
}

2、具体工厂
public class FactoryBMW implements FactoryCar {

    @Override
    public BMW createCar() {
        return new BMW();
    }
}

public class FactoryWV implements FactoryCar {

    @Override
    public WV createCar() {
        return new WV();
    }
}

3、抽象产品
public abstract class Car {

    public void print() {}

    //获得行驶最大速度
    public int getMaxSpeed() {  
        return 0;
    }

    //获得油耗
    public double getFuelConsume() {
        return 0.0;
    }
}
添加这几个方法的目的是为了好理解,汽车共有的特性,但是数据不同。

4、具体方法
public class BMW extends Car {

    private static final String TAG = "car";
    private double consume = 8.8;
    private int speed = 165;

    public BMW() {
    }

    @Override
    public void print() {
        super.print();
        Log.e(TAG, "print: 宝马系列-MaxSpeed = " + speed + " / FuelConsume = " + consume);
    }

    @Override
    public int getMaxSpeed() {
        return speed;
    }

    @Override
    public double getFuelConsume() {
        return consume;
    }
}

public class WV extends Car {

    private static final String TAG = "car";
    private double consume = 6.8;
    private int speed = 168;

    public WV() {
    }

    @Override
    public void print() {
        super.print();
        Log.e(TAG, "print: 大众系列-MaxSpeed = " + speed + " / FuelConsume = " + consume);
    }

    @Override
    public int getMaxSpeed() {
        return speed;
    }

    @Override
    public double getFuelConsume() {
        return consume;
    }
}

5、客户
/**
 * 通过汽车工厂获得我们需要的车型
 */
factoryBMW = new FactoryBMW();
BMW bmw = factoryBMW.createCar();
mBmw.setText("宝马-油耗: " + bmw.getFuelConsume() + " L/100km - 最高速度: " + bmw.getMaxSpeed() + " km/h");
bmw.print();


factoryWV = new FactoryWV();
WV wv = factoryWV.createCar();
mWv.setText("大众-油耗: " + wv.getFuelConsume() + " L/100km - 最高速度: " + wv.getMaxSpeed() + " km/h");
wv.print();
6、工厂方法模式比简单工厂模式好的地方就是添加新的车型不需要在原来的代码上修改或添加。我们只需要添加一个
新的车型工厂就可以了,譬如:
public class FactoryBYD implements FactoryCar {
    @Override
    public BYD createCar() {
        return new BYD();
    }
}
public class BYD extends Car {

    private static final String TAG = "car";
    private double consume = 9.8;
    private int speed = 135;

    public BYD() {
    }

    @Override
    public void print() {
        super.print();
        Log.e(TAG, "print: 宝马系列-MaxSpeed = " + speed + " / FuelConsume = " + consume);
    }
}
/**
 * 新添加的BYD车型
 */
factoryBYD = new FactoryBYD();
BYD byd = factoryBYD.createCar();
byd.print();
对就是这么简单,有兴趣你也来试试吧。


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值