抽象工厂模式-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();
}
}
运行测试类输出如下内容:
抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
结构图
上图摘自《大话设计模式》
应用场景
一个系统的产品有多于一个的产品族,同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来,系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现。
源码示例
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手机
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 设计模式之创建型模式
- 浅谈设计模式的学习
- PHP设计模式之装饰者模式代码实例
- php设计模式之单例模式实例分析
- 介绍php设计模式中的工厂模式
- PHP设计模式之适配器模式代码实例
- 浅谈c#设计模式之单一原则
- C#设计模式之观察者模式实例讲解
- C#设计模式之单例模式实例讲解
- 深入理解JavaScript系列(28):设计模式之工厂模式详解
- 面向对象设计模式的核心法则
- JavaScript设计模式之单件模式介绍
- 深入理解JavaScript系列(25):设计模式之单例模式详解
- JavaScript设计模式之外观模式实例
- 常见的PHP五种设计模式小结
- 小议javascript 设计模式 推荐
- javascript 设计模式之单体模式 面向对象学习基础