您的位置:首页 > 其它

抽象工厂模式-Abstract Factory Pattern

2015-08-04 11:52 519 查看
基本概念

抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

结构图



上图摘自《大话设计模式》

应用场景

一个系统的产品有多于一个的产品族,同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来,系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现。

源码示例

1.创建电脑产品接口

package com.spook.abstractfactory;

/**
* 电脑产品接口
*/
public interface Computer {
public void produce();
}
2.创建一个具体电脑实现类
package com.spook.abstractfactory;

/**
* 模拟具体电脑产品类
*/
public class MacBookAir implements Computer {

@Override
public void produce() {
// TODO Auto-generated method stub
System.out.println("MacBookAir电脑");
}

}
3.创建另一个电脑实现类
package com.spook.abstractfactory;

/**
* 模拟具体电脑产品类
*/
public class MacBookPro implements Computer {

@Override
public void produce() {
// TODO Auto-generated method stub
System.out.println("MacBookPro电脑");
}

}

4.创建手机产品接口

package com.spook.abstractfactory;

/**
* 手机产品接口
*/
public interface MobilePhone {
public void produce();
}
5.创建一个手机实现类
package com.spook.abstractfactory;

/**
* 模拟具体手机产品类
*/
public class IPhone6 implements MobilePhone{

@Override
public void produce() {
// TODO Auto-generated method stub
System.out.println("iPhone6 手机");
}

}
6.创建另一个手机实现类
package com.spook.abstractfactory;

/**
* 模拟具体手机产品类
*/
public class IPhone6plus implements MobilePhone {

@Override
public void produce() {
// TODO Auto-generated method stub
System.out.println("iPhone6 Plus手机");
}

}
7.创建一个工厂接口
package com.spook.abstractfactory;

/**
* 模拟苹果公司生产工厂,假定有两种产品:电脑和手机
*/
public interface AppleFactory {
public Computer createComputer();

public MobilePhone createPhone();

}
8.创建台电工厂,实现工厂接口
package com.spook.abstractfactory;

/**
* 台电工厂,假定能够生产MacBookAir电脑和iPhone6
*/
public class TeclastFactory implements AppleFactory {

@Override
public Computer createComputer() {
// TODO Auto-generated method stub
return new MacBookAir();
}

@Override
public MobilePhone createPhone() {
// TODO Auto-generated method stub
return new IPhone6();
}

}
9.创建富士康工厂,实现工厂接口
package com.spook.abstractfactory;

/**
* 富士康工厂,假定能够生产MacBookPro电脑和iPhone6 plus
*/
public class FoxconnFactory implements AppleFactory {

@Override
public Computer createComputer() {
// TODO Auto-generated method stub
return new MacBookPro();
}

@Override
public MobilePhone createPhone() {
// TODO Auto-generated method stub
return new IPhone6plus();
}

}
10.测试类
package com.spook.abstractfactory;

/**
* 测试类
*/
public class Test {

public static void main(String[] args) {
// TODO Auto-generated method stub
AppleFactory teclastFactory = new TeclastFactory();
System.out.println("台电工厂生产的产品如下:");
Computer computer = teclastFactory.createComputer();
computer.produce();
MobilePhone phone = teclastFactory.createPhone();
phone.produce();

AppleFactory foxcoonFactory = new FoxconnFactory();
System.out.println("------------------");
System.out.println("富士康工厂生产的产品如下:");
computer = foxcoonFactory.createComputer();
computer.produce();
phone = foxcoonFactory.createPhone();
phone.produce();

}

}
运行测试类输出如下内容:
台电工厂生产的产品如下:
MacBookAir电脑
iPhone6 手机
------------------
富士康工厂生产的产品如下:
MacBookPro电脑
iPhone6 Plus手机
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息