设计模式之-工厂篇

设计模式之-工厂篇

今天来说说工厂模式的一些简单的例子,对于工厂模式,工厂模式的好处就是省去了我们创建对象时每次都去new 一个具体的对象,省去了我们不断的if—else判断等等。我们可能用到过一些,比如我们肯定知道BitmapFactory等等,这些就是android原生API中所涉及到的模式,可能我们之前对模式没有具体的概念,下面我来大致的写个简单的例子,一起学习一下。

首先举例,这里以汽车来举例,针对汽车的品牌来创建不同的对象,那么我们该怎么做呢?
我们先创建一个接口Car,那么这个接口中有一个方法,比如说是go();
1、那么我们可以认为这个go()是所有汽车子类都具有的性质。
public interface Car {
public void go();
}

2、那么我们想要生产比如说宝马车,应该怎么做呢?
public class BMW implements Car {
@Override
public void go() {

}

}

3、这个时候问题就来了,难道我每生产一种新型的汽车,我就单独写一个该类型汽车的类继承Car?
这个时候我们就可以建立一个汽车的工厂类,如下:
public interface CarFactory {
public Car build(String name);//根据参数的名称 生产对应的汽车类型
}

4、如果我们想新建一个宝马车,那么我们就可以直接新建一个宝马工厂实现CarFactory 这个接口,如下:
public class BMWFactory implements CarFactory {
private static BMWFactory ins;
public static BMWFactory getIns() {
if(null == ins){
ins = new BMWFactory();
}
return ins;
}
BMWFactory() {//空的构造方法
}
@Override
public Car build(String name) {
if(name.equals(“BMW”)){
return new BMW();
}
return null;
}
}
//这里注意:你需要生产什么样的车子,就建造一个什么样的工厂
// 这种模式一定要切记 维护方便 后期增加新的车类 直接新建一个新的工厂就行了

5、写到这里估计有人会说,这不是更麻烦了,我只是新建一个宝马车,又要新建宝马对象又要新建宝马工厂。确实麻烦了,那么为了避免新建车类老是往工厂跑 这个干脆直接定义一个所谓的车子代理商(太TM切合实际现实)如下:
public class AgentFactory {
private static AgentFactory ins;
public static AgentFactory getIns() {
if(ins == null){
ins = new AgentFactory();
}
return ins;
}
//取得定制牌子的汽车啊
public CarFactory getCarFactory(String name){
if(name.equals(“BWM”)){
return new BMWFactory();
}
return null;
}
}

6、那么写到这里我们要测试一下最后的结果是怎么样的呢,如下:
public class FactoryDemo {
public static void main(String[]args){
CarFactory carFactory = AgentFactory.getIns().getCarFactory(“BMW”);
Car daben = carFactory.build(“DABEN”);
daben.go();
}
}

结果大家可以去自己敲一下看看打印出来看看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值