一、概述

1.抽象工厂:当情况是需要产生一系列产品,若需更换产品,则要求一系列产品一起换,且要控制一系列产品的产生过程,此时可考虑抽象工厂模式。例:小明装修屋子,把电视、冰箱都替换掉,他这次需要把电视、冰箱换成三星的,下次装修可能要换成海尔的。此时可设计抽象类Telveison及Fridge负责产生产品,抽象工厂AbstractFactory负责产生一系列产品

PS:抽象工厂与普通工厂各自的优缺点:

(1)普通工厂容易在产品维度进行扩展,但产生系列产品时不方便,且易造成工厂类泛滥

(2)抽象工厂增加新产品时,要修改AbstractFactory等多处地方

二、类结构

1.Televison.java

2.Fridge.java

3.SamsumgTelevison.java

4.SamsungFridge.java

5.HaierTevevison.java

6.HaierFridge.java

7.AbstractFactory.java

8.SamsungFactory.java

9.HaierFactory.java

三、代码

1.Televison.java

public abstract class Televison {

	abstract void show();
}

  

2.Fridge.java

public abstract class Fridge {

	abstract void cool();
}

  

3.SamsumgTelevison.java

public class SamsungTelevison extends Televison {

	@Override
public void show(){
System.out.println("SamsungTelevison showing...........");
}
}

  

4.SamsungFridge.java

public class SamsungFridge extends Fridge {

	@Override
void cool() {
System.out.println("SamsungFridge cooling");
} }

  

5.HaierTevevison.java

public class HaierTelevison extends Televison {

	@Override
void show() {
System.out.println("海尔电视 showinng...........");
} }

  

6.HaierFridge.java

public class HaierFridge extends Fridge {

	@Override
void cool() {
System.out.println("海尔冰箱冷却中............");
} }

  

7.AbstractFactory.java

public abstract class AbstractFactory {
abstract Televison createTelevison();
abstract Fridge createFridge();
}

  

8.SamsungFactory.java

public class SamsungFactory extends AbstractFactory {

	@Override
Televison createTelevison() {
return new SamsungTelevison();
} @Override
Fridge createFridge() {
return new SamsungFridge();
} }

  

9.HaierFactory.java

public class HaierFactory extends AbstractFactory {

	@Override
Televison createTelevison() {
return new HaierTelevison();
} @Override
Fridge createFridge() {
return new HaierFridge();
} }

  

10.Test.java

public class Test {

	@org.junit.Test
public void test(){
AbstractFactory factory = new SamsungFactory();
Televison tv = factory.createTelevison();
Fridge fridge = factory.createFridge();
tv.show();
fridge.cool(); System.out.println("======================================="); factory = new HaierFactory();
tv = factory.createTelevison();
fridge = factory.createFridge();
tv.show();
fridge.cool();
}
}

  

运行结果:

最新文章

  1. 一劳永逸:域名支持通配符,ASP.NET Core中配置CORS更轻松
  2. struts2将servlet对象注入到Action中
  3. redis AOF保存机制
  4. 夺命雷公狗---微信开发13----获取access_token
  5. MyElcipse之问题小结
  6. 关于搭建Android环境的时候遇到 'could not find adb.exe!'的问题
  7. 配置android source 在ubuntu中编译环境
  8. 利用MyEclipse的ant插件生成Hibernate的映射文件
  9. 在自定义的js验证规则中调用magento的VarienForm方法验证表单
  10. 《C++ Primer》之面向对象编程(三)
  11. 利用内核cgroup机制轻松实现类似docker的系统资源管控
  12. POJ1269 Intersecting Lines[线段相交 交点]
  13. Tomcat 请求处理流程详解
  14. 一次mysql主从加keepalived配置搭建及切换演示
  15. .net aop 操作 切面应用 Castle.Windsor框架 spring 可根据接口 自动生成一个空的实现接口的类
  16. how to calculate the best fit to a plane in 3D, and how to find the corresponding statistical parameters
  17. T4模板根据数据库表和列的Description生成代码的summary的终极解决方案
  18. [LeetCode] 844. Backspace String Compare_Easy tag: Stack **Two pointers
  19. python爬虫rp+bs4
  20. 清明梦超能力者黄YY(idx数组)

热门文章

  1. Eclipse插件开发_学习_01_Maven+Tycho 构建RCP程序
  2. Linux-软件安装管理
  3. signal 信号具体含义解释~
  4. UVA - 1218 Perfect Service (树形dp)(inf相加溢出)
  5. win8.1系统相关
  6. 机器学习:SVM(scikit-learn 中的 RBF、RBF 中的超参数 γ)
  7. java代码String创建对象数组,进行排序
  8. L2-002. 链表去重(map结构体,精彩的代码)
  9. python第三十二天-----算法
  10. Python unittest excel数据驱动 写入