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

来源:互联网 发布:淘宝怎么重发产品 编辑:程序博客网 时间:2024/05/22 04:27

想成为高级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 0
原创粉丝点击