抽象工厂模式(abstract factory)

意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
结构:
[img]http://dl.iteye.com/upload/attachment/0064/8519/1bac3b70-2a35-3458-93da-80b9e97f083e.png[/img]
AbstractFactory声明一个创建抽象产品的操作接口
ConcreteFactory实现创建具体产品对象的操作
AbstractProduct为一类产品对象声明一个接口
ConcreteProduct定义一个将被相应的具体工厂创建的产品对象,并且要实现AbstractProduct接口

实现示例:
public abstract class ProductA {
abstract void operationA();
}

public abstract class ProductB {
abstract void operationB();
}

ublic abstract class AbstractFactory {
abstract ProductA getProductA();
abstract ProductB getProductB();
}

public class ProductA1 extends ProductA {
@Override
void operationA() {
System.out.println("ProductA1 operation A1");
}
}

public class ProductB1 extends ProductB {
@Override
void operationB() {
System.out.println("ProductB1 operation B1");
}
}

public class ConcreteFactory1 extends AbstractFactory {
@Override
ProductA getProductA() {
return new ProductA1();
}

@Override
ProductB getProductB() {
return new ProductB1();
}
}

public class ProductA2 extends ProductA {
@Override
void operationA() {
System.out.println("ProductA2 operation A2");
}
}

ublic class ProductB2 extends ProductB {
@Override
void operationB() {
System.out.println("ProductB2 operation B2");
}
}

public class ConcreteFactory2 extends AbstractFactory {
@Override
ProductA getProductA() {
// TODO Auto-generated method stub
return new ProductA2();
}

@Override
ProductB getProductB() {
// TODO Auto-generated method stub
return new ProductB2();
}
}

客户端使用代码:
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(args[0]);
AbstractFactory f = null;
switch (Integer.parseInt(args[0])) {
case 1:
System.out.println("select 1 series Factory");
f = new ConcreteFactory1();
break;
case 2:
System.out.println("select 2 series Factory");
f = new ConcreteFactory2();
break;
default:
System.out.println("wrong command parameter");
System.exit(2);
}
ProductA pa = f.getProductA();
ProductB pb = f.getProductB();
pa.operationA();
pb.operationB();
}
}

运行结果:
命令行参数[color=blue] 1 [/color]时的结果:
[color=blue]1
select 1 series Factory
ProductA1 operation A1
ProductB1 operation B1[/color]

命令行参数[color=orange] 2[/color]时的结果:
[color=orange]2
select 2 series Factory
ProductA2 operation A2
ProductB2 operation B2[/color]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值