android的工厂模式设置,android设计模式之工厂模式

简介:

工厂模式是创建型设计模式的一种,它使用户不必关心具体产品的生产,直接获取想要的结果。工厂模式包括:简单工厂模式,工厂方法模式,抽象工厂模式;对应难度,初级、中级、高级三个不同的难度等级。而常说的工厂模式,通常是指代工厂方法模式。

参考连接

初级:简单工厂模式

以下创建一个简单的表格显示实例,来理解简单工厂模式;

普通实现:

方式一:

/**

* Created by zhangxuehui on 2017/6/9.

* 普通模式,实现图表

*/

public class ChartSimple {

public static void main(String[] args) {

//具体使用

new LineChart().showChart();

new PieChart().showChart();

new ClumnChart().showChart();

}

/**

* 线性图类

*/

public static class LineChart {

public LineChart() {

System.out.println("初始化线型图");

}

public void showChart() {

System.out.println("显示线型图");

}

}

/**

* 饼状图类

*/

public static class PieChart {

public PieChart() {

System.out.println("初始化饼状图");

}

public void showChart() {

System.out.println("显示饼状图");

}

}

/**

* 柱形图类

*/

public static class ClumnChart {

public ClumnChart() {

System.out.println("初始化柱形图");

}

public void showChart() {

System.out.println("显示柱形图");

}

}

}

问题

1.使用那种图表就要创建具体的图表实例;

2.代码冗余,会产生大量重复代码;

3.不便于维护,如改变所有图表的颜色;

4.需要对每一个图表类进行充分的理解;

方式二:

public class ChartUtils {

private int type;

private String data;

public ChartUtils(int type, String data) {

this.type = type;

this.data = data;

}

public String createChart() {

String str = "";

switch (type) {

case 0:

str = createLineTable();

break;

case 1:

str = createPieTable();

break;

default:

str = createclumnTable();

break;

}

return str;

}

private String createLineTable() {

return "线性图";

}

private static String createPieTable() {

return "饼状图";

}

private static String createclumnTable() {

return "柱形图";

}

}

问题

1.代码冗余,没有对图表的公共行为进行提取;

2.违背了开闭原则(对于扩展是开放的,对于修改是关闭的);

3.ChartUtils类中包含表格的创建、绘制、类型判断等,过于复杂,违反了单一原创;

4.需要维护表格的类型,每一种type,对应一种表格,增加了维护成本;

以上问题该如何解决?来看看简单工厂模式

简单工厂模式(Simple Factory Pattern)

概念

定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。

知识要点

用户提出需求,工厂返回结果,用户无需关心具体实现;

标准类图

18b698cbdffc

简单工厂模式类图

角色分析

-Factory(工厂角色):是用户直接接触的方法,负责产品实例的创建以及产品逻辑实现。

-Product (抽象产品角色):是所有产品的父类,为工厂提供了公共方法。

-ConcreteProduct (具体产品角色):是产品的具体实现类。

案例分析

1.图表案例类图设计

18b698cbdffc

图表类简单工厂模式类图.png

2.代码实现

//图表接口类

public interface Chart {

//初始化图表

void init();

//显示图表

public void show();

}

//饼状图类

public class PieChart implements Chart {

public PieChart() {

init();

}

@Override

public void init() {

System.out.println("初始化饼状图");

}

@Override

public void show() {

System.out.println("显示饼状图");

}

}

//线性图类

public class LineChart implements Chart {

public LineChart() {

init();

}

@Override

public void init() {

System.out.println("初始化线性图");

}

@Override

public void show() {

System.out.println("显示线性图");

}

}

//柱形图类

public class ClumnChart implements Chart{

public ClumnChart() {

init();

}

@Override

public void init() {

System.out.println("初始化柱形图");

}

@Override

public void show() {

System.out.println( "显示柱形成");

}

}

//简单工厂类

public class ChartFactory {

public static final int CHART_LINE = 100; //线性图

public static final int CHART_PIE = 101; //饼状图

public static final int CHART_CLUMN = 102; //柱形图

public static Chart getChart(int type) {

Chart chart;

if (type == CHART_LINE) {

chart = new LineChart();

} else if (type == CHART_PIE) {

chart = new PieChart();

} else {

chart = new ClumnChart();

}

return chart;

}

}

//具体实现类

public class UserChart {

public static void main(String[] args) {

//显示图表

ChartFactory.getChart(ChartFactory.CHART_CLUMN).show();

}

}

总结

简单工厂模式,有如下几个优点:

1.耦合性低,将用户和产品进行分类;

2.单一入口,减少记忆量;

3.遵循开闭原则,使用不需要修改相关代码;

缺点如下:

1.不方便拓展,新增图表需要修改除抽象产品之外的所有代码;

2.随着产品的增加,工厂类的逻辑复杂度也会增加;

使用场景

产品类型基本固定,用户会经常切换产品的场景;

例如:android中的图片三级缓存、GreenDao 数据类型的切换等

中级:工厂方法模式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值