设计模式:简单工厂模式

原本自己开发了各种web、移动应用,还开源了几个项目,觉得自己能力不错了,可最近在研究Android源码的时候才发现,自己某些方面的缺失。而这种缺失就是设计模式。起初对于各种设计模式都有过了解,但也只是略知大概的概念皮毛,所以在看源码的时候发现,就像是在看天书一般,令人难受,所以现在打算重头对各种设计模式整理一遍,当给自己敲个警钟---路还很长,自己还不够强。

一、引

现在先从简单工厂模式入手,简单工厂模式一般来说是学习设计模式的第一种模式,难度就跟它的名字一样,简单。虽然简单工厂模式看起来学起来很简单,但是其中却是对面向对象编程很好的理解和诠释。面向对象编程的三个特性是封装、继承和多态,接下来就来看看一个简单工厂模式是怎么运用到这三大特性的。

二、问题

直接贴源码未免有些不妥,所以我们先抛出一个问题,仔细思考一下这个问题:如果让你实现一个计算器程序,你会怎么设计?

三、理解

很多人会说很简单,不就是使用if-else-if或者switch语句么,稍加判断就可以实现各种你想要的运算符号。但是仔细思考一下,如果一个初始程序通过这种方式已经实现“+ - * /”,那当我需要再添加一个根号需要怎么做,有人说很简单,只要多一条分支就可以解决,这又不是难事儿。说的没错,多加一条分支确实不是难事儿,但是你每次修改都需要给你初始程序源码,那当这个初始源码属于机密时,你是否就束手无策了?

所以这个时候往继承这个方向上理解,你就会知道明白奥秘了。

四、实现

首先是定义一个父类,这个父类就是上面我们提到的机密,我们无法接触到的,即只知道这个类内部的构造即可,无法修改它。

package text;

public class Operation {
	private double numA;
	private double numB;
	public double getNumA() {
		return numA;
	}
	public void setNumA(double numA) {
		this.numA = numA;
	}
	public double getNumB() {
		return numB;
	}
	public void setNumB(double numB) {
		this.numB = numB;
	}
	public double GetResult() {
		double result = 0;
		return result;
	}
}

接下来实现我们需要增加的子类,这个子类就是我们自己随时可以添加的,+ - * /  根号,随时都可以添加。

package text;

public class OperationAdd extends Operation {
	@Override
	public double GetResult() {
		double result = 0;
		result = getNumA() + getNumB();
		return result;
	}
}

仔接下来,为了保证耦合度,就使用工厂类

package text;

public class OperationFactory {
	public static Operation createOperation(String operate) {
		Operation operation = null;
		switch (operate) {
		case "+":
			operation = new OperationAdd();
			break;
		}
		return operation;
	}
}

实现很简单,重在理解。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章