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
- Android 进阶之路:常见设计模式之工厂模式
- Android 进阶之路:常见设计模式之观察者模式
- Android 进阶之路:常见设计模式之装饰模式
- Android 进阶之路:常见设计模式之适配器模式
- Android 进阶之路:常见设计模式之建造模式
- 常见设计模式之【工厂模式】
- Android 进阶之路:常见设计模式之单例模式
- Android 进阶之路:常见设计模式之代理模式一
- Android 进阶之路:常见设计模式之代理模式二
- Android设计模式之工厂设计模式
- Android进阶之设计模式
- android设计模式之简单工厂模式
- android设计模式之工厂方法模式
- android设计模式之抽象工厂模式
- Android 设计模式之工厂模式
- Android 设计模式学习之工厂模式
- Android设计模式之工厂模式 Factory
- Android设计模式之工厂模式
- 2016届数据结构学习总结
- HttpURLConnection 网络请求 get post
- Android C++智能指针
- nfs——网络文件系统
- 一位机器学习面试官对求职者的考核
- Android 进阶之路:常见设计模式之工厂模式
- 2. Add Two Numbers
- 关于使用navicat向sqlserver和mysql数据库导入excel的问题
- linux cpufreq framework(5)_ARM big Little driver
- 线程池的饱和策略-Semaphore实现任务提交限制
- 第十五周——项目一—验证算法(6)选择排序之堆排序
- android studio下解决 java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/
- ES6数组去重写法
- 使用idea,自动生成mybatis相关代码