您的位置:首页 > 编程语言 > Java开发

JAVA设计模式是个什么玩意儿_02_抽象工厂模式

2016-10-26 00:22 441 查看

1. 定义



2. 思路

       抽象工厂模式是工厂方法模式的进一步抽象,为创建一组相关或相互依赖的对象提供一个接口,无需指定它们的具体类。抽象工厂通常用于创一族产品,并且这组产品分不同的等级,不同的工厂生产不同等级的一族产品。

3. 代码

BMW.java
BMWX3.java
BMWX5.java
------------------------
Aircondition.java
GeliAircondition.java
HaierAircondition.java
-------------------------
BMWFactory.java
BMWX3Factory.java
BMWX5Factory.java
--------------------------
Client.java
public interface BMW {
public void run();
}
public class BMWX3 implements BMW {
public void run() {
System.out.println("宝马X3在奔跑……");
}
}
public class BMWX5 implements BMW {
public void run() {
System.out.println("宝马X5在奔跑……");
}
}


public interface Aircondition {
public void air();
}
public class GeliAircondition implements Aircondition {
public void air() {
System.out.println("格力空调正在吹风……");
}
}
public class HaierAircondition implements Aircondition {
public void air() {
System.out.println("海尔空调正在吹风……");
}
}


public interface BMWFactory {
public BMW produceBMW();
public Aircondition produceAircondition();
}
public class BMWX3Factory implements BMWFactory {

public BMW produceBMW() {
return new BMWX3();
}

public Aircondition produceAircondition() {
return new GeliAircondition();
}
}
public class BMWX5Factory implements BMWFactory {

public BMW produceBMW() {
return new BMWX5();
}

public Aircondition produceAircondition() {
return new HaierAircondition();
}
}


public class Client {

public static void main(String[] args) {
BMWFactory bmwx3Factory = new BMWX3Factory();
bmwx3Factory.produceBMW();
bmwx3Factory.produceAircondition();

BMWFactory bmwx5Factory = new BMWX5Factory();
bmwx5Factory.produceBMW();
bmwx5Factory.produceAircondition();
}
}

4. 优点和缺点

抽象工厂模式的优点

1)分离接口和实现
客户端使用抽象工厂来创建需要的对象,而客户端根本就不知道具体的实现是谁,客户端只是面向产品的接口编程而已。也就是说,客户端从具体的产品实现中解耦。

2)使切换产品族变得容易
因为一个具体的工厂实现代表的是一个产品族,从Intel系列到AMD系列只需要切换一下具体工厂。拿上面的代码来说,就是从BMWX3系列到BMWX5系列只需要切换一下具体的工厂即可。

 

抽象工厂模式的缺点

1)不太容易扩展新的产品
如果需要给整个产品族添加一个新的产品,那么就需要修改抽象工厂,这样就会导致修改所有的工厂实现类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息