Java-马士兵设计模式学习笔记-工厂模式-抽象工厂模式
2024-08-31 12:40:56
一、概述
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();
}
}
运行结果:
最新文章
- 一劳永逸:域名支持通配符,ASP.NET Core中配置CORS更轻松
- struts2将servlet对象注入到Action中
- redis AOF保存机制
- 夺命雷公狗---微信开发13----获取access_token
- MyElcipse之问题小结
- 关于搭建Android环境的时候遇到 'could not find adb.exe!'的问题
- 配置android source 在ubuntu中编译环境
- 利用MyEclipse的ant插件生成Hibernate的映射文件
- 在自定义的js验证规则中调用magento的VarienForm方法验证表单
- 《C++ Primer》之面向对象编程(三)
- 利用内核cgroup机制轻松实现类似docker的系统资源管控
- POJ1269 Intersecting Lines[线段相交 交点]
- Tomcat 请求处理流程详解
- 一次mysql主从加keepalived配置搭建及切换演示
- .net aop 操作 切面应用 Castle.Windsor框架 spring 可根据接口 自动生成一个空的实现接口的类
- how to calculate the best fit to a plane in 3D, and how to find the corresponding statistical parameters
- T4模板根据数据库表和列的Description生成代码的summary的终极解决方案
- [LeetCode] 844. Backspace String Compare_Easy tag: Stack **Two pointers
- python爬虫rp+bs4
- 清明梦超能力者黄YY(idx数组)
热门文章
- Eclipse插件开发_学习_01_Maven+Tycho 构建RCP程序
- Linux-软件安装管理
- signal 信号具体含义解释~
- UVA - 1218 Perfect Service (树形dp)(inf相加溢出)
- win8.1系统相关
- 机器学习:SVM(scikit-learn 中的 RBF、RBF 中的超参数 γ)
- java代码String创建对象数组,进行排序
- L2-002. 链表去重(map结构体,精彩的代码)
- python第三十二天-----算法
- Python unittest excel数据驱动 写入