Java设计模式之三 —— 抽象工厂
来源:互联网 发布:好看的自拍软件 编辑:程序博客网 时间:2024/05/22 03:23
1.问题提出
书接前文,我们有家工厂,生产的产品Product有两种,一种是飞机ProductA,一种是汽车ProductB,我们已经采用了FactoryMethod工厂方法进行对象的构建,那么现在我们的业务更加细化了如下:
A.飞机 —— ProductA
- 军用飞机 —— ProductA1
- 民用飞机 —— ProductA2
B.汽车 —— ProductB
- 军用汽车 —— ProductB1
- 民用汽车 —— ProductB2
2.类图设计
3.代码编写
1)定义Product接口:
public interface Product
{
public void printProduct();
}
{
public void printProduct();
}
2)定义ProductA、ProductB接口:
public interface ProductA extends Product
{
public void printProduct();
{
public void printProduct();
}
public interface ProductB extends Product
{
public void printProduct();
}
{
public void printProduct();
}
3)定义ProductA1、ProductA2和ProductB1、ProductB2:
public class ProductA1 implements ProductA
{
public void printProduct()
{
System.out.println("ProductA1");
}
}
public class ProductA2 implements ProductA
{
public void printProduct()
{
System.out.println("ProductA2");
}
}
public class ProductB1 implements ProductB
{
public void printProduct()
{
System.out.println("ProductB1");
}
}
public class ProductB2 implements ProductB
{
public void printProduct()
{
System.out.println("ProductB2");
}
}
{
public void printProduct()
{
System.out.println("ProductA1");
}
}
public class ProductA2 implements ProductA
{
public void printProduct()
{
System.out.println("ProductA2");
}
}
public class ProductB1 implements ProductB
{
public void printProduct()
{
System.out.println("ProductB1");
}
}
public class ProductB2 implements ProductB
{
public void printProduct()
{
System.out.println("ProductB2");
}
}
4.运行结果
下面我们写一个Client来进行测试:
public class Client
{
public static void main(String[] args)
{
//定义一个军用产品的构造器
ProductCreator productCreator1 = new ProductCreator1();
//定义一个民用产品的构造器
ProductCreator productCreator2 = new ProductCreator2();
//使用军用工厂方法,构建一个军用飞机
ProductA productA1 = productCreator1.factoryA();
//使用民用工厂方法,构建一个民用飞机
ProductA productA2 = productCreator2.factoryA();
//使用军用工厂方法,构建一个军用汽车
ProductB productB1 = productCreator1.factoryB();
//使用民用工厂方法,构建一个民用汽车
ProductB productB2 = productCreator2.factoryB();
//控制台输出军用飞机
productA1.printProduct();
//控制台输出民用飞机
productA2.printProduct();
//控制台输出军用汽车
productB1.printProduct();
//控制台输出民用汽车
productB2.printProduct();
}
}
{
public static void main(String[] args)
{
//定义一个军用产品的构造器
ProductCreator productCreator1 = new ProductCreator1();
//定义一个民用产品的构造器
ProductCreator productCreator2 = new ProductCreator2();
//使用军用工厂方法,构建一个军用飞机
ProductA productA1 = productCreator1.factoryA();
//使用民用工厂方法,构建一个民用飞机
ProductA productA2 = productCreator2.factoryA();
//使用军用工厂方法,构建一个军用汽车
ProductB productB1 = productCreator1.factoryB();
//使用民用工厂方法,构建一个民用汽车
ProductB productB2 = productCreator2.factoryB();
//控制台输出军用飞机
productA1.printProduct();
//控制台输出民用飞机
productA2.printProduct();
//控制台输出军用汽车
productB1.printProduct();
//控制台输出民用汽车
productB2.printProduct();
}
}
运行结果如下:
5.总结
- 优点 —— 抽象工厂模式帮我们控制一个应用创建的对象类。封装了创建产品的过程,他与客户端分离,客户通过他们的抽象接口操纵实例,产品的类名也不出现在客户端代码中。一个具体的工厂类在一个应用中仅仅出现一次,也就是说在它初始化的时候。这是的改变一个应用的具体工厂变得很容易,我们只需要改变具体的工厂即可使用不同的产品配置。使用抽象工程模式有利于产品的一致性,当一系列的产品对象在一起工作时,一个应用一次只能使用同一个系列中的对象。
- 缺点 —— 难以支持心中类的产品,抽象工厂AbstractFactory接口确定了可以被创建的产品集合,如果想让它支持一种新的产品,就必须要扩展该工厂的接口,这将涉及到AbstractFactory类和它的所有子类的改变。
- Java设计模式之三 —— 抽象工厂
- JAVA设计模式(三)——抽象工厂模式
- Java设计模式之三(抽象工厂模式)
- Java设计模式之——抽象工厂模式
- 三 设计模式之抽象工厂模式
- 设计模式之三--抽象工厂模式
- 设计模式之三:抽象工厂模式
- 设计模式之三抽象工厂模式
- 设计模式之三:抽象工厂模式
- 设计模式之三:抽象工厂模式
- 设计模式之三:抽象工厂模式
- 设计模式之抽象工厂模式(三)
- <Java设计模式>—抽象工厂模式
- java设计模式(三)--抽象工厂模式
- JAVA设计模式三抽象工厂模式
- java设计模式示例程序之 ——简单工厂、工厂方法、抽象工厂模式
- 设计模式之工厂模式(三)之抽象工厂模式
- Java设计模式—工厂方法模式&抽象工厂模式
- VC常用小技巧
- 实战Linux Bluetooth编程(三) HCI层编程
- 在软件蓝领和金领之间的女生
- “等死模式”vs “穿越模式”
- 抽象工厂模式
- Java设计模式之三 —— 抽象工厂
- webservice和remoting 应用和区别
- Jquery库的替代
- 相信未来
- 智能的PHP缩图类
- SQL Server对文件进行全文检索的查询
- 高效生成随机数组——已发《电脑报》
- hibernate和ibatis
- 删除顽固文件和程序的方法