设计模式之工厂模式,抽象工厂模式
2017-04-25 00:00
411 查看
首先,我先谈下我对设计模式的理解。设计模式是很不错的但是容易被滥用,各位在学习的初期就记住一点。大胆的使用设计模式这样才能够学会。在使用的过程中遇到了坑才能明白什么时候该使用设计模式什么时候不该使用设计模式。在学习的过程中记得画UML建模图,这是我学习设计模式的一个技巧。
工厂模式主要是用来给我创建对象的,在不复杂的系统中不建议使用。
在上图中,我们需要关注的就是ShapeFactroy类。它生成了Shape接口的引用。下面我们来看代码。
上面四个类就是模拟UML左边的情况,下面来让我们看右边的模拟。
大家注意一下上述图中Map的使用技巧,这样我们就不需要判断当前需要实例化哪个对象了。
下面就是我们的测试类:
输出结果:draw Circle
总结一下:工厂模式的主要功能是为了创建对象。在我们需要扩展的时候只需写个实现Shape接口即可。使用的map中可以改成用枚举等类型,这里就不带大家做尝试了。
下面我们来看看抽象工厂模式,抽象工厂模式所创建的对象是为了一系对象,我们直接来看下UML图
这里我简要的说一下,Shape,Color为接口。AbstractFactory为抽象类。ShapeFactory,ColorFactory继承了该接口。
当我们需要多少组对象在继承abstractFactory时就实现多少,没有的就return null
下面我们来看测试类:
这样我们就可以输出 fill blue 了
工厂模式主要是用来给我创建对象的,在不复杂的系统中不建议使用。
在上图中,我们需要关注的就是ShapeFactroy类。它生成了Shape接口的引用。下面我们来看代码。
/** * Created by gao.mq on 2017/4/25. * 图形的接口 */ public interface Shape { public void draw(); }
/** * Created by gao.mq on 2017/4/25. * 绘画圆形 */ public class Circle implements Shape { @Override public void draw() { System.out.println("draw Circle"); } }
/** * Created by gao.mq on 2017/4/25. * 正方形的绘画 */ public class Square implements Shape { @Override public void draw() { System.out.println("draw square"); } }
/** * Created by gao.mq on 2017/4/25. * 绘画矩形 */ public class Rectangle implements Shape { @Override public void draw() { System.out.println("draw Rectangle"); } }
上面四个类就是模拟UML左边的情况,下面来让我们看右边的模拟。
/** * Created by gao.mq on 2017/4/25. * 创建工厂 */ public class ShapeFactory { private static final Map<String, Shape> map = new HashMap<>(); static { map.put("circle", new Circle()); map.put("rectangle", new Rectangle()); map.put("square", new Square()); } public Shape getShape(String shapeType) { return map.get(shapeType); }
大家注意一下上述图中Map的使用技巧,这样我们就不需要判断当前需要实例化哪个对象了。
下面就是我们的测试类:
/** * Created by gao.mq on 2017/4/25. * 工厂模式测试 */ public class FactoryPattern { public static void main(String[] args) { ShapeFactory shapeFactory = new ShapeFactory(); Shape shape = shapeFactory.getShape("circle"); shape.draw(); } }
输出结果:draw Circle
总结一下:工厂模式的主要功能是为了创建对象。在我们需要扩展的时候只需写个实现Shape接口即可。使用的map中可以改成用枚举等类型,这里就不带大家做尝试了。
下面我们来看看抽象工厂模式,抽象工厂模式所创建的对象是为了一系对象,我们直接来看下UML图
这里我简要的说一下,Shape,Color为接口。AbstractFactory为抽象类。ShapeFactory,ColorFactory继承了该接口。
/** * Created by gao.mq on 2017/4/25. */ public class ColorFactory extends AbstractFactory{ private static final Map<String,Color> map=new HashMap<>(); static { map.put("red",new Red()); map.put("green",new Green()); map.put("blue",new Blue()); } @Override public Shape getShape(String shapeType) { return null; } @Override public Color getColor(String colorType) { return map.get(colorType); } }
/** * Created by gao.mq on 2017/4/25. * 创建工厂 */ public class ShapeFactory extends AbstractFactory { private static final Map<String, Shape> map = new HashMap<>(); static { map.put("circle", new Circle()); map.put("rectangle", new Rectangle()); map.put("square", new Square()); } @Override public Shape getShape(String shapeType) { return map.get(shapeType); } @Override public Color getColor(String colorType) { return null; } }
/** * Created by gao.mq on 2017/4/25. * 抽象工厂 */ public abstract class AbstractFactory { public abstract Shape getShape(String shapeType); public abstract Color getColor(String colorType); }
当我们需要多少组对象在继承abstractFactory时就实现多少,没有的就return null
下面我们来看测试类:
/** * Created by gao.mq on 2017/4/25. * 抽象工厂测试类 */ public class AbstractFactoryTest { public static void main(String[] args) { AbstractFactory abstractFactory = FactoryProduct.getFactory("color"); Color color = abstractFactory.getColor("blue"); color.fill(); } }
这样我们就可以输出 fill blue 了
相关文章推荐
- 设计模式之工厂方法模式与抽象工厂模式
- C#设计模式之工厂模式(Factory)--04 抽象工厂模式中访问具体产品类的属性
- 23种设计模式01---工厂模式之抽象工厂模式
- 设计模式之工厂模式和抽象工厂模式
- 常用Java设计模式系列(5)- 简单工厂、工厂方法模式和抽象工厂模式
- 设计模式——抽象工厂模式及与工厂模式的区别
- 设计模式之简单工厂、工厂方法模式、抽象工厂模式
- 设计模式- 简单工厂模式---->工厂方法模式---->抽象工厂模式
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- 设计模式之工厂模式factory 抽象工厂模式 abstract factory
- java中的设计模式 工厂 和抽象工厂模式 的例子
- 设计模式之工厂模式与抽象工厂模式
- 设计模式------工厂模式和抽象工厂模式
- 设计模式--工厂方法、抽象工厂模式
- 设计模式---工厂设计模式之抽象工厂模式
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- Head First 设计模式学习——简单工厂方法-工厂方法模式-抽象工厂模式
- 设计模式之工厂方法模式与抽象工厂模式
- 设计模式之工厂模式VS抽象工厂模式
- JAVA设计模式之:工厂模式(下)--抽象工厂模式