工厂模式
实现了创建者和调用者的分离
详细分类:
简单工厂模式
工厂方法模式
抽象工厂模式
面向对象设计的基本原则:
OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对应拓展开放,对修改关闭
DIP(依赖倒转原则,Dependence Inversion Principle):要针对接口编程,不要针对实现编程
LoD(迪米特法则,Law of Demeter):只与你直接的朋友通信,而避免和陌生人通信
1、案例:在没有使用工厂模式的情况下
Car.java
package junit.matrix.simplefactory;
public interface Car {
public void run();
}
Audi.java
package junit.matrix.simplefactory;
public class Audi implements Car {
@Override
public void run() {
System.out.println("奥迪在跑!");
}
}
Byd.java
package junit.matrix.simplefactory;
public class Byd implements Car {
@Override
public void run() {
System.out.println("比亚迪在跑!");
}
}
Client01.java
package junit.matrix.simplefactory;
/**
* 测试在没有工厂模式的情况下
*
* Client01<BR>
* 创建人:Matrix <BR>
* 时间:2016年2月24日-上午1:17:43 <BR>
*
* @version 1.0.0
*
*/
public class Client01 {// 调用者
public static void main(String[] args) {
Car c1 = new Audi();
Car c2 = new Byd();
c1.run();
c2.run();
}
}
运行结果:
奥迪在跑!
比亚迪在跑!
2、使用简单工厂模式
CarFactory.java
package junit.matrix.simplefactory;
public class CarFactory {
public static Car createCar(String type) {
if ("奥迪".equals(type)) {
return new Audi();
} else if ("比亚迪".equals(type)) {
return new Byd();
} else {
return null;
}
}
}
Client02.java
package junit.matrix.simplefactory;
public class Client02 {// 调用者
public static void main(String[] args) {
Car c1 = CarFactory.createCar("奥迪");
Car c2 = CarFactory.createCar("比亚迪");
c1.run();
c2.run();
}
}
工厂类也可以这样
CarFactory02.java
package junit.matrix.simplefactory;
public class CarFactory02 {
public static Car createAudi() {
return new Audi();
}
public static Car createByd() {
return new Byd();
}
}
Client02.java
package junit.matrix.simplefactory;
public class Client02 {// 调用者
public static void main(String[] args) {
Car c1 = CarFactory02.createAudi();
Car c2 = CarFactory02.createByd();
c1.run();
c2.run();
}
}
运行结果:
奥迪在跑!
比亚迪在跑!