java设计模式(三)--抽象工厂模式
2017-08-02 00:00
441 查看
对于抽象工厂(Abstract Factory)设计模式,我认为是对工厂模式的提高,它提供了一种创建对象的最佳方式,在这个模式中,接口成了创建具体对象的工厂,不需要之前通过每次的new对象来完成对对象的实例化,而是将这种new对象的工作交给了工厂,可以说,工厂掌控了对象产生的权力,通过工厂来对所需要的对象进行实例化。
这种模式强调接口编程,模式中大量使用接口,来降低各个类之间的耦合度。
![](https://static.oschina.net/uploads/img/201708/02213116_ufgw.png)
1.创建形状接口:
2.实现形状接口,完成正方形和矩形类的创建
3.创建颜色接口
4.实现颜色接口,完成绿色和红色类的创建
5.创建抽象工厂
6.实现抽象工厂,编写能够创建形状和颜色工厂的两个类
7.通过传参实现对抽象工厂的创建
8.测试
9.后台输出
这种模式强调接口编程,模式中大量使用接口,来降低各个类之间的耦合度。
实例: 实现对形状和颜色的创建的程序编写。
![](https://static.oschina.net/uploads/img/201708/02213116_ufgw.png)
1.创建形状接口:
public interface Shape { void draw(); }
2.实现形状接口,完成正方形和矩形类的创建
public class Square implements Shape { [@Override](https://my.oschina.net/u/1162528) public void draw() { System.out.println("正方形"); } } public class Rectangle implements Shape { [@Override](https://my.oschina.net/u/1162528) public void draw() { System.out.println("矩形"); } }
3.创建颜色接口
public interface Color { void fill(); }
4.实现颜色接口,完成绿色和红色类的创建
public class Green implements Color { [@Override](https://my.oschina.net/u/1162528) public void fill() { System.out.println("绿色"); } } public class Red implements Color { [@Override](https://my.oschina.net/u/1162528) public void fill() { System.out.println("红色"); } }
5.创建抽象工厂
public interface AbstractFactory { public Color getColor(String color); public Shape getShpae(String shape); }
6.实现抽象工厂,编写能够创建形状和颜色工厂的两个类
public class ColorFactory implements AbstractFactory { [@Override](https://my.oschina.net/u/1162528) public Shape getShpae(String shape) { return null; } @Override public Color getColor(String color) { if(color==null){ return null; }else{ if(color.equalsIgnoreCase("green")){ return new Green(); }else if(color.equalsIgnoreCase("red")){ return new Red(); }else{ return null; } } } } public class ShapeFactory implements AbstractFactory{ @Override public Color getColor(String color) { return null; } @Override public Shape getShpae(String shape) { if(shape==null){ return null; }else{ if(shape.equalsIgnoreCase("square")){ return new Square(); }else if(shape.equalsIgnoreCase("rectangle")){ return new Rectangle(); }else{ return null; } } } }
7.通过传参实现对抽象工厂的创建
public class FactoryProducer { public static AbstractFactory getFactory(String type){ if(type==null){ return null; }else{ if(type.equalsIgnoreCase("shape")){ return new ShapeFactory(); }else if(type.equalsIgnoreCase("color")){ return new ColorFactory(); }else{ return null; } } } }
8.测试
public class Test { public static void main(String[] args) { AbstractFactory abstractFactory=FactoryProducer.getFactory("shape"); Shape shape1=abstractFactory.getShpae("square"); shape1.draw(); Shape shape2=abstractFactory.getShpae("rectangle"); shape2.draw(); AbstractFactory abstractFactory2=FactoryProducer.getFactory("color"); Color color1=abstractFactory2.getColor("green"); color1.fill(); Color color2=abstractFactory2.getColor("red"); color2.fill(); } }
9.后台输出
正方形 矩形 绿色 红色
优点:通过这种工厂的设计模式,可以通过对工厂中方法的调用来完成指定对象的实例化,通过一个String的参数的传递,就能完成指定类的创建,简化了编码工作量。 缺点:这种模式不利于后期的扩展,如果有扩展的具体类需要加入的话,要修改好多的类中的内容(与抽象工厂有关的类都需要修改,加大了工作难度)
相关文章推荐
- java设计模式——抽象工厂模式
- 走穿java23种设计模式-3抽象工厂模式详解
- JAVA设计模式(02):创建型-抽象工厂模式(Abstract Factory)
- JAVA的23种设计模式---抽象工厂模式
- Java设计模式——抽象工厂模式(Abstract factory)
- Java设计模式之抽象工厂模式
- JAVA设计模式之抽象工厂模式
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- Java设计模式之抽象工厂模式
- java设计模式之创建型模式-抽象工厂模式
- java设计模式之抽象工厂模式
- JAVA设计模式之 抽象工厂模式【Abstract Factory Pattern】
- java设计模式之工厂方法模式和抽象工厂模式
- Java设计模式 - 抽象工厂模式(Abstract Factory)
- Java/Android 设计模式系列(4)--抽象工厂模式
- Java设计模式之“抽象工厂模式“
- JAVA设计模式 — 抽象工厂模式(Abstract Factory)
- java设计模式之抽象工厂模式
- 浅谈JAVA设计模式之——抽象工厂模式(AbstractFactoty)
- Java 设计模式之抽象工厂模式的详解(创建模式)