Spring学习必备知识之抽象工厂模式
2016-03-04 10:54
513 查看
*工厂模式的作用是用于创建对象
回顾工厂方法模式:针对不同的产品提供不同的工厂。这样当有多个产品时就需要多个工厂。所以希望能一个工厂提供多种产品对象而不是单一生产产品,这就引出了抽象工厂模式。
通过例子来说明:
有两个工厂,一个工厂A生产2厢的车,分2.0排量和3.0排量两种;工厂B生产3厢的车,分2.0排量和3.0排量两种
抽象工厂模式有两个概念:产品等级结构和产品族,具体参考这篇博文。
在上面的例子中,我们可以:
定义两个个抽象产品分别为2.0排量的车和3.0排量的车,然后用具体产品类去实现它们
抽象产品2.0排量的车:
package com.example;
public interface Iproduct1 {
//一个抽象产品
//2.0排量的车
public void display();
}
具体实现:
public class ProductA1 implements Iproduct1 {
@Override
public void display() {
/*
* 这是一个具体产品
* 生产2.0排量的车
*/
System.out.println("我是2厢车厂2.0排量的车");
}
}
抽象产品3.0排量的车
public interface Iproduct2 {
//一个抽象产品
//3.0排量的车
public void display();
}
具体实现
public class ProductB1 implements Iproduct2 {
@Override
public void display() {
/*
* 这是一个具体产品
* 生产3.0排量的车
*/
System.out.println("我是2厢车厂3.0排量的车");
}
}
接下来定义抽象工厂:
public interface IFactory {
//一个抽象工厂
public Iproduct1 createCar2();
public Iproduct2 createCar3();
}
具体工厂1:
public class FactoryA implements IFactory {
/*
* 2厢车的具体工厂
*/
@Override
public Iproduct1 createCar2() {
return new ProductA1();
}
@Override
public Iproduct2 createCar3() {
return new ProductB1();
}
}
具体工厂2:
public class FactoryB implements IFactory {
@Override
public Iproduct1 createCar2() {
return new ProductA2();
}
@Override
public Iproduct2 createCar3() {
return new ProductB2();
}
}
这样一个工厂就可以提供两个具体产品,与工厂方法模式的区别就出来了!
接下来我们用客户端来测试:比如我们想创建一个3厢3.0排量的车
public class Client {
public static void main(String[] args){
IFactory factory = new FactoryB();
factory.createCar3().display();
}
}
运行结果:
我参考学习的地址:设计模式
回顾工厂方法模式:针对不同的产品提供不同的工厂。这样当有多个产品时就需要多个工厂。所以希望能一个工厂提供多种产品对象而不是单一生产产品,这就引出了抽象工厂模式。
通过例子来说明:
有两个工厂,一个工厂A生产2厢的车,分2.0排量和3.0排量两种;工厂B生产3厢的车,分2.0排量和3.0排量两种
抽象工厂模式有两个概念:产品等级结构和产品族,具体参考这篇博文。
在上面的例子中,我们可以:
定义两个个抽象产品分别为2.0排量的车和3.0排量的车,然后用具体产品类去实现它们
抽象产品2.0排量的车:
package com.example;
public interface Iproduct1 {
//一个抽象产品
//2.0排量的车
public void display();
}
具体实现:
public class ProductA1 implements Iproduct1 {
@Override
public void display() {
/*
* 这是一个具体产品
* 生产2.0排量的车
*/
System.out.println("我是2厢车厂2.0排量的车");
}
}
package com.example; public class ProductA2 implements Iproduct1 { @Override public void display() { System.out.println("我是3厢车厂2.0排量的车"); } }
抽象产品3.0排量的车
public interface Iproduct2 {
//一个抽象产品
//3.0排量的车
public void display();
}
具体实现
public class ProductB1 implements Iproduct2 {
@Override
public void display() {
/*
* 这是一个具体产品
* 生产3.0排量的车
*/
System.out.println("我是2厢车厂3.0排量的车");
}
}
public class ProductB2 implements Iproduct2 { @Override public void display() { /* * 这是一个具体产品 * 生产3.0排量的车 */ System.out.println("我是3厢车厂3.0排量的车"); } }
接下来定义抽象工厂:
public interface IFactory {
//一个抽象工厂
public Iproduct1 createCar2();
public Iproduct2 createCar3();
}
具体工厂1:
public class FactoryA implements IFactory {
/*
* 2厢车的具体工厂
*/
@Override
public Iproduct1 createCar2() {
return new ProductA1();
}
@Override
public Iproduct2 createCar3() {
return new ProductB1();
}
}
具体工厂2:
public class FactoryB implements IFactory {
@Override
public Iproduct1 createCar2() {
return new ProductA2();
}
@Override
public Iproduct2 createCar3() {
return new ProductB2();
}
}
这样一个工厂就可以提供两个具体产品,与工厂方法模式的区别就出来了!
接下来我们用客户端来测试:比如我们想创建一个3厢3.0排量的车
public class Client {
public static void main(String[] args){
IFactory factory = new FactoryB();
factory.createCar3().display();
}
}
运行结果:
我参考学习的地址:设计模式
相关文章推荐
- Draw Something,以何种魅力征服大众
- 介绍php设计模式中的工厂模式
- asp.net 简单工厂模式和工厂方法模式之论述
- 深入理解JavaScript系列(28):设计模式之工厂模式详解
- js简单工厂模式用法实例
- JavaScript设计模式经典之工厂模式
- javascript 模式设计之工厂模式详细说明
- 实例解析Java单例模式编程中对抽象工厂模式的运用
- python中getattr函数使用方法 getattr实现工厂模式
- 工厂模式在Zend Framework中应用介绍
- 浅析php工厂模式
- C++设计模式之抽象工厂模式
- C++设计模式之简单工厂模式实例
- c#使用简单工厂模式实现生成html文件的封装类分享
- PHP高级对象构建 工厂模式的使用
- 基于php设计模式中工厂模式详细介绍
- PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
- C++设计模式之工厂方法模式