工厂模式分为两种一种工厂方法,一种抽象工厂
工厂的存在就是为我们new对象的,这样节省了我们的开发时间。在JAVA中应用十分广泛
其中XXXFactory的都是采用的工厂模式,专门生产XXX的工厂
这是简单工厂模式作为引例
package 设计模式;
//简单工厂模式
/**
* 缺点就是你要是扩展新的产品时,必须修改CarFactory类的代码
* 会产生不安全
*/
interface Car {
void run();
}
class Audi implements Car {
@Override
public void run() {
System.out.println("奥迪在跑");
}
}
class BYD implements Car {
@Override
public void run() {
System.out.println("比亚迪在跑");
}
}
class CarFactory {
//方式一
public static Car getCar(String type) {
if ("奥迪".equals(type)) {
return new Audi();
} else if ("比亚迪".equals(type)) {
return new BYD();
} else {
return null;
}
}
}
public class 简单工厂模式 {
public static void main(String[] args) {
Car a = CarFactory.getCar("奥迪");
a.run();
Car b = CarFactory.getCar("比亚迪");
b.run();
}
}
这是工厂方法
package 设计模式;
/**
*工厂方法当增加产品时其实也需要改代码,但是不在原有的代码上改,而是新增代码来扩展功能
* 比简单方法更加安全
*/
interface Car_1{
void run();
}
//两个实现类
class Audi_1 implements Car_1{
@Override
public void run() {
System.out.println("奥迪在跑");
}
}
class BYD_1 implements Car_1{
@Override
public void run() {
System.out.println("比亚迪在跑");
}
}
//工厂接口
interface Factory_1{
Car_1 getCar();
}
//两个工厂类
class AudiFactory implements Factory_1{
@Override
public Audi_1 getCar(){
return new Audi_1();
}
}
class BydFactory implements Factory_1{
@Override
public BYD_1 getCar(){
return new BYD_1();
}
}
public class 工厂方法模式 {
public static void main(String[] args) {
Car_1 a = new AudiFactory().getCar();
Car_1 b = new BydFactory().getCar();
a.run();
b.run();
}
}
抽象工厂模式和工厂方法模式的区别就在于需要创建对象的复杂程度上。而且
抽象工厂模式是三个里面最为抽象、最具一般性的。
抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品
对象。
而且使用抽象工厂模式还要满足一下条件:
- 系统中有多个产品族,而系统一次只可能消费其中一族产品。
- 同属于同一个产品族的产品以其使用。