设计模式-工厂模式

工厂模式的主要作用是为创建对象提供了接口,分为简单工厂模式、工厂方法模式、抽象工厂模式。

一、 简单工厂模式:

1 使用:具体的产品种类比较少的情况下使用,使用在业务比较简单的情况下。

2构成:抽象产品类,它一般是具体产品类继承的父类或者实现的接口,通常由抽象类或者接口实现。

具体产品类,在工厂类中创建此类的实例对象

工厂类,调用工厂类的方法生成具体的产品类对象。

3 实现:




public class TestFactory {
// 抽象产品接口
interface Car {
public void drive();
}


// 具体产品类
static class Bmw implements Car {


public void drive() {
System.out.println("bmw drived");
}
}


static class Benz implements Car {


public void drive() {
System.out.println("Benz drived");
}


}


static class Audi implements Car {


public void drive() {
System.out.println("Audi drived");
}


}


// 工厂类
static class Driver {
public static Car driveCar(String carName) {
if (carName == "bmw") {
return new Bmw();
} else if (carName == "Benz") {
return new Benz();
} else if (carName == "Audi") {
return new Audi();
}
return null;
}
}


public static void main(String[] args) {
// 测试简单工厂模式
Car car = Driver.driveCar("bmw");
car.drive();
}
}

注:要在main ()中测试简单工厂使用,所以所有的类、接口都加了static关键字,开发中抽象产品类(接口)、具体产品类、工厂类在不同的文件中。

简单工厂模式的不足:

如果新增产品的话,只要实现具体产品接口即可,对于产品部分符合“开闭原则”(对扩展开放,对修改关闭),但是新增产品后,工厂类中还要增加逻辑判断,不符合“开闭原则”。

所以简单工厂模式适用于业务简单的情况下,随时可能新增产品的情况,简单工厂模式不适用,此时工厂方法模式适用,见下。

二 、工厂方法模式

1 使用:业务复杂的情况下使用

2 构成:抽象产品类(接口)、具体产品类、具体工厂类,同上。

抽象工厂类(接口):具体工厂类继承的父类或者要实现的接口。

3 实现:



public class TestFactory {
// 抽象产品接口
interface Car {
public void drive();
}


// 具体产品类
static class Bmw implements Car {


public void drive() {
System.out.println("bmw drived");
}
}


static class Benz implements Car {


public void drive() {
System.out.println("Benz drived");
}


}


static class Audi implements Car {


public void drive() {
System.out.println("Audi drived");
}


}


// 抽象工厂类
interface Driver {
public Car driverCar();
}


// 具体工厂类
static class BenzDriver implements Driver {


public Car driverCar() {
return new Benz();
}


}


static class BmwDriver implements Driver {


public Car driverCar() {
return new Bmw();
}


}


static class AudiDriver implements Driver {


public Car driverCar() {
return new Audi();
}


}


public static void main(String[] args) {
// 测试工厂方法模式
Car car = new BmwDriver().driverCar();
car.drive();
}
}

在工厂方法模式中,每增加一种产品,就要增加生产该产品的具体工厂类,每个工厂类只生产一种产品。工厂方法模式符合开闭原则,新增产品时不必修改已有的代码,只需增加具体产品类、具体工厂类即可。

不足:当产品种类太多时,就会出现大量的与之对应的具体工厂类,要编写大量的代码,开发费时费力。

三、抽象工厂模式(略)

参考http://haolloyin.blog.51cto.com/1177454/332802


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值