抽象工厂模式
来源:互联网 发布:农村淘宝开业计划书 编辑:程序博客网 时间:2024/06/06 07:15
案例
在 工厂方法模式 的案例基础上,为农夫山泉、咖啡增加了常温、加热两种状态。
/* 1. 抽象产品接口(水) */public interface Water { public void getWaterType(); public void getWaterTemperature();}
/* * 抽象的产品类(咖啡) */public abstract class AbstractCoffee implements Water{ public void getWaterType(){ System.out.println("这是一杯咖啡"); }}
/* * 抽象的产品类(农夫山泉) */public abstract class AbstractNongFuSpring implements Water{ public void getWaterType(){ System.out.println("这是一瓶农夫山泉"); }}
/* * 具体产品类:热的咖啡 */public class HotCoffee extends AbstractCoffee{ @Override public void getWaterTemperature() { System.out.println("咖啡是热的……"); }}
/* * 具体产品类:热的农夫山泉 */public class HotNongFuSpring extends AbstractNongFuSpring{ @Override public void getWaterTemperature() { System.out.println("农夫山泉是热的……"); }}
/* * 具体产品类:常温的咖啡 */public class NormalCoffee extends AbstractCoffee{ @Override public void getWaterTemperature() { System.out.println("咖啡是常温的"); }}
/* * 具体产品类:常温的农夫山泉 */public class NormalNongFuSpring extends AbstractNongFuSpring{ @Override public void getWaterTemperature() { System.out.println("农夫山泉是常温的"); }}
/* * 抽象工厂接口 */public interface Creator { public Water createCoffee(); public Water createNongFuSpring();}
/* * 具体工厂类(热饮) */public class HotCreator implements Creator{ @Override public Water createCoffee() { return new HotCoffee(); } @Override public Water createNongFuSpring() { return new HotNongFuSpring(); }}
/* * 具体工厂类(常温饮品) */public class NormalCreator implements Creator{ @Override public Water createCoffee() { return new NormalCoffee(); } @Override public Water createNongFuSpring() { return new NormalNongFuSpring(); }}
/* * 使用场景 */public class Scene { public static void main(String[] args) { Creator hotCreator = new HotCreator(); Creator normalCreator = new NormalCreator(); //生产一杯热的咖啡 Water coffee = hotCreator.createCoffee(); coffee.getWaterType(); coffee.getWaterTemperature(); //生产一瓶热的农夫山泉 Water nongFuSpring = hotCreator.createNongFuSpring(); nongFuSpring.getWaterType(); nongFuSpring.getWaterTemperature(); }}
优点
- 封装性良好
- 产品族内的约束为非公开状态。如:在饮品的产量上,常温饮品的产量与热饮的产量之间有一个约束(2:1)存在,这样的生产过程对调用工厂类的高层模块而言是透明的,因为其具体的实现过程是在工厂内完成的
缺点
- 产品族的扩展会比较困难。如:增加一个产品(可口可乐),会牵涉到哪些类的改动?
使用场景
- 一个对象族(或是一组没有任何关系的对象)都有相同的约束,则可以使用抽象工厂模式。如:一个文本编辑器和一个图片处理器,都是软件实体,但是Unix 下的文本编辑器和 Windows 下的文本编辑器虽然功能和界面都相同,但是代码实现是不同的,图片处理器也有类似情况。也就是具有了共同的约束条件:操作系统类型。于是我们可以使用抽象工厂模式,产生不同操作系统下的编辑器和图片处理器。
0 0
- 工厂模式 -- 抽象工厂
- 工厂模式-抽象工厂
- 工厂模式-抽象工厂
- 工厂模式/抽象工厂模式
- 工厂模式&&抽象工厂模式
- 工厂模式---抽象工厂模式
- 工厂模式&抽象工厂模式
- 工厂模式,抽象工厂模式
- 【模式】抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 工厂方法,抽象工厂模式
- 2,工厂模式--抽象工厂
- C#工厂模式-抽象工厂
- 工厂模式与抽象工厂
- 抽象工厂设计模式
- 抽象工厂模式
- 寻找非共有数字
- 软件项目管理流程总结
- 第四章:shell处理用户输入
- swift语言的学习笔记四-2(对上一节有些遗留进行处理)
- swoole深入学习 3. upd Server和udp Client
- 抽象工厂模式
- Class文件内容及常量池
- swoole深入学习 4. process
- swift语言的学习笔记五(线程)
- webpack英文文档阅读笔记--ES6环境配置
- leetcode-344- Reverse String
- 解决svn无法cleanup
- 通俗讲解 异步,非阻塞和 IO 复用
- swift语言的学习笔记六(ARC-自动引用计数,内存管理)