工厂模式 实现了创建者和调用者的分离。
工厂模式的核心本质:
– 实例化对象,用工厂方法代替new操作。
– 将选择实现类、创建对象统一管理和控制。从而将调用者跟我们的实现类解耦。
1 简单工厂模式
简单工厂模式也叫静态工厂模式,就是工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。
下面演示使用简单工厂类创建对象:
package designPat.SimpleFactory;
/***
* 简单工厂模式
* @author Administrator
*
*/
public class SinmleCarFactory {
static Car createCar(String type) {
Car car;
if("audi".equals(type))
{
car=new AUDI();
}else if("bmw".equals(type)) {
car=new BMW();
}else {
return null;
}
return car;
}
}
-------------------------------------------------
package designPat.SimpleFactory;
public class Car {
void run() {
}
}
--------------------------------------------
package designPat.SimpleFactory;
public class BMW extends Car {
String name;
public BMW() {
name="宝马";
}
void run() {
System.out.println(name+"跑的好快");
}
}
---------------------------------------------
package designPat.SimpleFactory;
public class AUDI extends Car{
String name;
public AUDI() {
name="奥迪";
}
void run() {
System.out.println(name+"跑的和上面的一样快");
}
}
-------------------------------------------
package designPat.SimpleFactory;
public class Test {
public static void main(String[] args) {
Car b=SinmleCarFactory.createCar("bmw");
Car c=SinmleCarFactory.createCar("audi");
b.run();
c.run();
}
}
2工厂方法模式
工厂方法模式和简单工厂模式最大的不同在于,简单工厂模式只有一个(对于一个项目或者一个独立模块而言)工厂类,而工厂方法模式有一组实现了相同接口的工厂类。
工厂方法目模式支持增加任意产品。
符合了开闭原则。
但是类比简单工厂多了好几个,所以有点繁琐。
实际开发中,还是使用简单工厂比较多。
package designPat.factory;
public interface CarCreate {
Car createCar();
}
----------------------------------------------------
package designPat.factory;
public class Car {
String name;
void run() {
}
}
-------------------------------------------------------
package designPat.factory;
public class Benz extends Car {
Car car;
void run() {
System.out.println("奔驰跑的好快");
}
}
-----------------------------------------------------
package designPat.factory;
public class BenzCreate implements CarCreate {
Car car;
@Override
public Car createCar() {
return new Benz();
}
}
-------------------------------------------------------
package designPat.factory;
public class Byd extends Car {
Car car;
void run() {
System.out.println("BYD车好破,跑不动");
}
}
------------------------------------------------------------------
package designPat.factory;
public class BydCreate implements CarCreate{
@Override
public Car createCar() {
return new Byd();
}
}
------------------------------------------------------------
package designPat.factory;
public class Test {
public static void main(String[] args) {
Car benz = new BenzCreate().createCar();
benz.run();
Car byd = new BydCreate().createCar();
byd.run();
}
}