抽象工厂模式
来源:互联网 发布:熊猫网络电视 编辑:程序博客网 时间:2024/05/29 18:02
上一篇写了简单工厂和工厂方法,简单工厂和工厂方法点这里,面向对象的23种设计模式点这里。我们还用上篇美女的例子,直接上代码:
public class Factory {//抽象工厂模式,还是一个类。觉得适合看的人拷过去运行修改//抽象工厂是种匹配关系,这才是核心所在,说没用的只看了形式。 abstract static class 美女 { 身材 身材;//这里为了简单,我们感兴趣的只是身材 void 美女(){ System.out.println("身材:" + 身材.getName()); } } public interface 身材 { String getName(); } public static class 大长腿 implements 身材{ @Override public String getName() { return "大长腿"; } } public static class 小短腿 implements 身材{ @Override public String getName() { return "小短腿"; } } private static class 萝莉美女 extends 美女 { public void 设置身材(Factory.小短腿 身材) { this.身材 = 身材; } public void 美女() { System.out.println("获得一个萝莉美女"); super.美女(); } } private static class 御姐美女 extends 美女 { public void 美女() { System.out.println("获得一个御姐美女"); super.美女(); } public void 设置身材(Factory.大长腿 身材) { this.身材 = 身材; } } public static void main(String[] args) { 萝莉美女工厂 萝莉工厂 = new 萝莉美女工厂(); 萝莉美女 萝莉 = 萝莉工厂.获取美女(); 萝莉.设置身材(new 小短腿()); 萝莉.美女(); 御姐美女工厂 御姐工厂 = new 御姐美女工厂(); 御姐美女 御姐 = 御姐工厂.获取美女(); 御姐.设置身材(new 大长腿()); 御姐.美女(); } interface 抽象美女工厂 { 美女 获取美女(); } public static class 萝莉美女工厂 implements 抽象美女工厂 { @Override public 萝莉美女 获取美女() { return new 萝莉美女(); } } public static class 御姐美女工厂 implements 抽象美女工厂 { @Override public 御姐美女 获取美女() { return new 御姐美女(); } }}输出:获得一个萝莉美女身材:小短腿获得一个御姐美女身材:大长腿
可以看出抽象工厂解决的是萝莉美女与小短腿匹配的问题,其实这里用真正的产品如电脑更好,商务本配固态硬盘和普通显卡、游戏本配普通硬盘和独立显卡。用美女仅仅是为了好玩,也祝愿单身程序员脱单像写代码一样容易。
总结:工厂模式就是不用自己new,而交给简单工厂。当产品复杂时,就需要不止一种工厂于是有了工厂方法。最后产品和组成产品的属性有种匹配,于是有了抽象工厂。所以,没有最好的,只有最适合的。
阅读全文
0 0
- 工厂模式 -- 抽象工厂
- 工厂模式-抽象工厂
- 工厂模式-抽象工厂
- 工厂模式/抽象工厂模式
- 工厂模式&&抽象工厂模式
- 工厂模式---抽象工厂模式
- 工厂模式&抽象工厂模式
- 工厂模式,抽象工厂模式
- 【模式】抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 工厂方法,抽象工厂模式
- 2,工厂模式--抽象工厂
- C#工厂模式-抽象工厂
- 工厂模式与抽象工厂
- 抽象工厂设计模式
- 抽象工厂模式
- 二叉树的层次遍历及之形打印算法 Java实现
- 如何用git将项目代码上传到github
- IntelliJ IDEA使用教程 (总目录篇)
- 两大数据库缓存系统实现对比
- app访问webapi数据为null
- 抽象工厂模式
- android edittext password hint字体和普通输入框不同
- matplotlib模块数据可视化-动画
- jqGrid学习笔记
- 九宫格的布局你能够想到哪些办法实现?它们各自的优缺点是什么?
- 飞思卡尔9S12X系列双核中的协处理器XGATE使用方法
- 【POJ】3614
- 《Apache Velocity用户指南》官方文档
- c# MD5及盐值加密