Android 进阶之路:常见设计模式之工厂模式

想成为高级Android工程师其中熟悉常见的设计模式是必不可少的,这个也是我面试一线互联网公司的深刻体会,首先我们现在介绍最基础也是最常用的设计模式:工厂模式
在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的。但是在一些情况下, new操作符直接生成对象会带来一些问题。
一、简单工场模式
对于简单的工厂模式,其实也可以将其理解成为一个创建对象的工具类。工具类的形式,可以仿造如下代码编写

public class SimpleFactory {
    public Object create(Class<?> clazz) {
        if (clazz.getName().equals(Plane.class.getName())) {
            return createPlane();
        } else if (clazz.getName().equals(Broom.class.getName())) {
            return createBroom();
        }
        return null;
    }

    private Broom createBroom() {
        return new Broom();
    }

    private Plane createPlane() {
        return new Plane();
    }
}

测试代码如下

public class FactoryTest {
    public static void main(String[] args) {
        // 简单工厂模式测试
        SimpleFactory simpleFactory = new SimpleFactory();
        Broom broom = (Broom) simpleFactory.create(Broom.class);
        broom.run();
    }
}

二、工场模式
我们来看一下工厂方法模式的定义吧。工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化哪一个。工厂方法让类把实例化推迟到了子类

1、工场业务

//工场接口
public abstract class VehicleFactory {
    public abstract Moveable create();
}
//具体工场实现
public class BroomFactory extends VehicleFactory {  

    @Override  
    public Moveable create() {  
        return new Broom();  
    }  
}  

这个具体的实现工厂告诉我们,这里可以通过 create() 方法来创建一个 Broom 对象。
我们可以这样来理解他们的关系:有一个大的工厂它就是 VehicleFactory,VehicleFactory工厂里又有很多生产车间,其中有一个就是 BroomFactory。我们的具体产品都是通过这些生产车间来负责生产的。
2、产品业务

//产品接口
public interface Moveable {  
    public void run();  
}  
//具体产品
public class Broom implements Moveable {  

    @Override  
    public void run() {  
        System.out.println("我是Broom.我在飞...");  
    }  

} 

3、测试 这个可以是多个工场,多个产品的实现

VehicleFactory factory = new BroomFactory();  
Moveable moveable = factory.create();  
moveable.run();  

三、抽闲工场模式
从上面的工厂方法中的结构图中,我们可以看到其中的具体工厂A和B是两个完全独立的。两者除了都是抽象工厂的子类,没有任何其他的交集。
但是,如果我们有这样一个需求:具体工厂A和B需要生产一些同类型的不同产品。那么我们就可以试试抽象工厂模式。

1、工场业务

//工场接口
public abstract class AbstractFactory {  
    public abstract Flyable createFlyable();  
    public abstract Moveable createMoveable();  
    public abstract Writeable createWriteable();  
} 
//具体工场实现类
public class Factory1 extends AbstractFactory {  

    @Override  
    public Flyable createFlyable() {  
        return new Aircraft();  
    }  

    @Override  
    public Moveable createMoveable() {  
        return new Car();  
    }  

    @Override  
    public Writeable createWriteable() {  
        return new Pen();  
    }  

}  

2、产品业务

//产品接口
public interface Flyable {
    public void fly(int height);  
}  
//产品实现
public class Aircraft implements Flyable {  

    @Override  
    public void fly(int height) {  
        System.out.println("我是一架客运机,我目前的飞行高度为:" + height + "千米。");  
    }  

}  

3、测试功能模块

public class FactoryTest {  

    public static void main(String[] args) {  
        AbstractFactory factory = new Factory1();  
        Flyable flyable = factory.createFlyable();  
        flyable.fly(1589);  

        Moveable moveable = factory.createMoveable();  
        moveable.run(87.6);  

        Writeable writeable = factory.createWriteable();  
        writeable.write("Hello World.");  
    }  
}  

资料引用 http://blog.csdn.net/lemon_tree12138/article/details/46225213

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值