简单工厂模式

面向对象的好处:
通过封装、继承、多态把程序的耦合度降低;
用设计模式使得程序更加的灵活,容易修改,并且易于复用.

  1. 封装
    把客观事物抽象成一个类,只能通过类提供的方法操作内部数据,细节不可见.
  2. 继承
    子类拥有父类的方法和字段.
  3. 多态
    一般来说多态是通过接口和抽象类来实现的,多个子类对接口、抽象类方法的不同实现,使得在使用接口和抽象类时有了不同的实现方式。(下面的OperationFactory就是最好的例子)

面向对象设计五大原则
单一职责原则(Single-Resposibility Principle)。”对一个类而言,应该仅有一个引起它变化的原因。”
开放封闭原则(Open-Closed principle)。”软件实体应该是可以扩展的,但是不可修改。”
Liskov替换原则(Liskov-Substituion Principle)。”子类型必须能够替换掉它们的基类型。”
依赖倒置原则(Dependecy-Inversion Principle)。”抽象不应依赖于细节,细节应该依赖于抽象。”
接口隔离原则(Interface-Segregation Principle)。”多个专用接口优于一个单一的通用接口。”

1
2
3
4
5
6
7
8
9
10
package simple.factory;

/**
* Created by hero on 17-2-16.
*/
public abstract class Operation {

public abstract double getResult(double a, double b);
}

1
2
3
4
5
6
7
8
9
10
11
12
package simple.factory;

/**
* Created by hero on 17-2-16.
*/
public class Add extends Operation {

public double getResult(double a, double b) {
return a + b;
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
package simple.factory;

/**
* Created by hero on 17-2-16.
*/
public class Division extends Operation {

public double getResult(double a, double b) {
if (b == 0) throw new IllegalArgumentException("divide 0.");
return a / b;
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package simple.factory;

/**
* Created by hero on 17-2-16.
*/
public class OperationFactory {

public static Operation createOperate(char opt) {
Operation operation = null;
switch (opt) {
case '+':
operation = new Add();
break;
case '/':
operation = new Division();
break;
default:
throw new IllegalArgumentException("can't calculate");
}
return operation;
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package simple.factory;

/**
* Created by hero on 17-2-16.
*/
public class Main {

public static void main(String[] args) {
Operation operation = OperationFactory.createOperate('+');
double res = operation.getResult(1.2, 3.8);
System.out.println(res);
}
}

编程是一门技术,更是一门艺术.