抽象工厂模式
来源:互联网 发布:淘宝怎么买图片空间 编辑:程序博客网 时间:2024/06/07 00:08
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显示指定他们的类。每个生成的工厂都能按照工厂模式提供对象
介绍
意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类
主要解决:主要解决接口选择的问题
何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品
如何解决:在一个产品族里面,定义多个产品
关键代码:在一个工厂里聚和多个同类产品
优点:当一个产品族中的多个对象被设计成一起工作时,他能保证客户端始终只能使用同一个产品族中的对象
缺点:产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的Creator里增加代码,又要在具体的里面加代码
实现步骤
1.创建一个shape、Color接口
public interface Shape {public void Draw();}
public interface Color {public void Fill();}
2.创建实现接口的实体类
public class Circle implements Shape{@Overridepublic void Draw() {System.out.println("draw a circle");}}
public class Line implements Shape{@Overridepublic void Draw() {System.out.println("draw a line");}}
public class Orange implements Color{@Overridepublic void Fill() {System.out.println("fill orange color!");}}
3.创建抽象类来获取工厂public abstract class AbstractFactory {abstract Shape getShape(String shapeType);abstract Color getColor(String colorType);}
4.创建扩展了抽象类,基于给定信息创建实体public class ShapeFactory extends AbstractFactory{@OverrideShape getShape(String shapeType) {if(shapeType==null){return null;}else if("circle".equalsIgnoreCase(shapeType)){return new Circle();}else if("line".equalsIgnoreCase(shapeType)){return new Line();}return null;}@OverrideColor getColor(String colorType) {// TODO Auto-generated method stubreturn null;}}
public class ColorFactory extends AbstractFactory{@OverrideShape getShape(String shapeType) {// TODO Auto-generated method stubreturn null;}@OverrideColor getColor(String colorType) {if(colorType==null){return null;}if("orange".equalsIgnoreCase(colorType)){return new Orange();}return null;}}
5.创建工厂制作类public class FactoryProducer {static AbstractFactory getFactory(String choice){if("shape".equalsIgnoreCase(choice)){return new ShapeFactory();}else if("color".equalsIgnoreCase(choice)){return new ColorFactory();}return null;}}
6.测试public class AbstractFactoryTest {public static void main(String[] args) {// TODO Auto-generated method stubAbstractFactory abstractFactory=FactoryProducer.getFactory("shape");Shape circle=abstractFactory.getShape("circle");Shape line=abstractFactory.getShape("line");circle.Draw();line.Draw();}}
7.结果
draw a circledraw a line
0 0
- 工厂模式 -- 抽象工厂
- 工厂模式-抽象工厂
- 工厂模式-抽象工厂
- 工厂模式/抽象工厂模式
- 工厂模式&&抽象工厂模式
- 工厂模式---抽象工厂模式
- 工厂模式&抽象工厂模式
- 工厂模式,抽象工厂模式
- 【模式】抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 工厂方法,抽象工厂模式
- 2,工厂模式--抽象工厂
- C#工厂模式-抽象工厂
- 工厂模式与抽象工厂
- 抽象工厂设计模式
- 抽象工厂模式
- iOS混合开发调试秘籍
- 校招笔试面试常考的数据库知识
- python 使用ssh scp做个升级程序
- 剑指offer:替换空格
- CentOS7搭建dev-stack环境
- 抽象工厂模式
- 教你打造一个万能的适配器
- 1030. 完美数列(25)
- java学习阶段归纳总结记录-for循环嵌套
- 程序员的3年之痒改变的不止薪水
- node express ejs 搭建个人网站(2)
- Android Studio使用命令将代码托管到GitHub上
- MAX3485芯片使用方法
- 第一行代码学习3(9)