设计模式 -- 抽象工厂模式
来源:互联网 发布:淘宝2016排名新规则 编辑:程序博客网 时间:2024/06/08 12:37
参考:http://www.runoob.com/design-pattern/abstract-factory-pattern.html
源码下载:https://github.com/gpqhl0071/pattern.git
1. 有多个简单工厂
2. 建立抽象方法获取想要的简单工厂的实例
代码
/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package com.pattern.abstractFactory;public interface Color { void fill();}
/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package com.pattern.abstractFactory;public interface Shape { void draw();}
/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package com.pattern.abstractFactory.impl;import com.pattern.abstractFactory.Shape;public class Circle implements Shape { @Override public void draw() { System.out.println("Inside Circle::draw() method."); }}
/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package com.pattern.abstractFactory.impl;import com.pattern.abstractFactory.Shape;public class Rectangle implements Shape { @Override public void draw() { System.out.println("Inside Rectangle::draw() method."); }}
/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package com.pattern.abstractFactory.impl;import com.pattern.abstractFactory.Shape;public class Square implements Shape { @Override public void draw() { System.out.println("Inside Square::draw() method."); }}
/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package com.pattern.abstractFactory.impl;import com.pattern.abstractFactory.Color;public class Blue implements Color { @Override public void fill() { System.out.println("Inside Blue::fill() method."); }}
/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package com.pattern.abstractFactory.impl;import com.pattern.abstractFactory.Color;public class Green implements Color { @Override public void fill() { System.out.println("Inside Green::fill() method."); }}
/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package com.pattern.abstractFactory.impl;import com.pattern.abstractFactory.Color;public class Red implements Color { @Override public void fill() { System.out.println("Inside Red::fill() method."); }}
/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package com.pattern.abstractFactory.factory;import com.pattern.abstractFactory.Color;import com.pattern.abstractFactory.Shape;public abstract class AbstractFactory { public abstract Color getColor(String color); public abstract Shape getShape(String shape);}
/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package com.pattern.abstractFactory.factory;import com.pattern.abstractFactory.Color;import com.pattern.abstractFactory.Shape;import com.pattern.abstractFactory.impl.Blue;import com.pattern.abstractFactory.impl.Green;import com.pattern.abstractFactory.impl.Red;public class ColorFactory extends AbstractFactory { @Override public Shape getShape(String shapeType) { return null; } @Override public Color getColor(String color) { if (color == null) { return null; } if (color.equalsIgnoreCase("RED")) { return new Red(); } else if (color.equalsIgnoreCase("GREEN")) { return new Green(); } else if (color.equalsIgnoreCase("BLUE")) { return new Blue(); } return null; }}
/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package com.pattern.abstractFactory.factory;import com.pattern.abstractFactory.Color;import com.pattern.abstractFactory.Shape;import com.pattern.abstractFactory.impl.Circle;import com.pattern.abstractFactory.impl.Rectangle;import com.pattern.abstractFactory.impl.Square;public class ShapeFactory extends AbstractFactory { @Override public Shape getShape(String shapeType) { if (shapeType == null) { return null; } if (shapeType.equalsIgnoreCase("CIRCLE")) { return new Circle(); } else if (shapeType.equalsIgnoreCase("RECTANGLE")) { return new Rectangle(); } else if (shapeType.equalsIgnoreCase("SQUARE")) { return new Square(); } return null; } @Override public Color getColor(String color) { return null; }}
/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package com.pattern.abstractFactory.factory;public class FactoryProducer { public static AbstractFactory getFactory(String choice) { if (choice.equalsIgnoreCase("SHAPE")) { return new ShapeFactory(); } else if (choice.equalsIgnoreCase("COLOR")) { return new ColorFactory(); } return null; }}
/**Copyright (c) 2016, gp.inc and/or its affiliates. All rights reserved.*/package com.pattern.abstractFactory.test;import com.pattern.abstractFactory.Color;import com.pattern.abstractFactory.Shape;import com.pattern.abstractFactory.factory.AbstractFactory;import com.pattern.abstractFactory.factory.FactoryProducer;public class AbstractFactoryPatternDemo { public static void main(String[] args) { // 获取形状工厂 AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE"); // 获取形状为 Circle 的对象 Shape shape1 = shapeFactory.getShape("CIRCLE"); // 调用 Circle 的 draw 方法 shape1.draw(); // 获取形状为 Rectangle 的对象 Shape shape2 = shapeFactory.getShape("RECTANGLE"); // 调用 Rectangle 的 draw 方法 shape2.draw(); // 获取形状为 Square 的对象 Shape shape3 = shapeFactory.getShape("SQUARE"); // 调用 Square 的 draw 方法 shape3.draw(); // 获取颜色工厂 AbstractFactory colorFactory = FactoryProducer.getFactory("COLOR"); // 获取颜色为 Red 的对象 Color color1 = colorFactory.getColor("RED"); // 调用 Red 的 fill 方法 color1.fill(); // 获取颜色为 Green 的对象 Color color2 = colorFactory.getColor("Green"); // 调用 Green 的 fill 方法 color2.fill(); // 获取颜色为 Blue 的对象 Color color3 = colorFactory.getColor("BLUE"); // 调用 Blue 的 fill 方法 color3.fill(); }}
结果
Inside Circle::draw() method.Inside Rectangle::draw() method.Inside Square::draw() method.Inside Red::fill() method.Inside Green::fill() method.Inside Blue::fill() method.
0 0
- 抽象工厂设计模式
- 设计模式-----抽象工厂
- 抽象工厂设计模式
- 抽象工厂设计模式
- 抽象工厂设计模式
- 设计模式 抽象工厂
- 设计模式--抽象工厂
- 设计模式--抽象工厂
- 设计模式 抽象工厂
- 设计模式-抽象工厂
- 设计模式-> 抽象工厂
- 抽象工厂设计模式
- 设计模式--抽象工厂
- 【设计模式】抽象工厂
- 设计模式---抽象工厂
- 【设计模式-抽象工厂】
- 设计模式-抽象工厂
- 设计模式--抽象工厂
- iOS拨打电话方法(3种)
- 网络编程socket之bind、Listen 及 accept
- 史上最全的iOS面试题及答案
- 中介者模式
- thinkphp购物车功能
- 设计模式 -- 抽象工厂模式
- HTTP协议状态码详解
- 设计模式(1)——单例模式
- Bitbucket 让 pull request变得更强大,可即刻提升团队代码质量
- jQuery EasyUI使用教程之扩展数据网格的编辑器
- vmware 虚拟机下网络设置 桥接及NAT
- Android apk的安装、卸载、更新升级(通过Eclipse实现静默安装)
- 设计模式(2)——简单工厂模式
- 1410501139蒋云超