Java-马士兵设计模式学习笔记-工厂模式-抽象工厂模式
2015-06-18 18:33
351 查看
一、概述
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
2.Fridge.java
3.SamsumgTelevison.java
4.SamsungFridge.java
5.HaierTevevison.java
6.HaierFridge.java
7.AbstractFactory.java
8.SamsungFactory.java
9.HaierFactory.java
10.Test.java
运行结果:
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(); } }
运行结果:
相关文章推荐
- Java并发编程-24-创建Fork/Join线程池
- spring4.0.5 + quartz1.8.6/2.2.1集群搭建
- Eclipse4.4.2手动安装Veloeclipse-2.0.8
- Lucene:基于Java的全文检索引擎简介
- Java System.getProperty()
- spider JAVA如何判断网页编码
- Java Math floor round ceil 函数
- spring 3 中使用注解的方式来进行任务调度
- JDK+JVM+JRE
- Struts2登陆的Demo
- 【java】itoo项目实战之减少IO读写的导入思路
- eclipse 离线安装ADT
- Java虚拟机体系结构
- Struts2 学习笔记
- springmvc
- spring queryForList 使用方式
- OpenLayers学习笔记7——使用javaBean实现用户登录
- eclipse中使用ant编译时,执行到javac命令后就停止执行解决办法
- 设计模式
- SpringMVC介绍之Validation