Java常用设计模式————抽象工厂模式
生活随笔
收集整理的這篇文章主要介紹了
Java常用设计模式————抽象工厂模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡介
每一個具體工廠類只負責創建抽象產品的某一個具體子類的實例。
與工廠方法模式的區別
工廠方法模式針對的是一個產品等級結構,而抽象工廠模式針對的是多個產品等級結構,因此抽象工廠模式在結構上要比工廠方法模式更加復雜和抽象,也更具一般性。
代碼實現
第一步:創建產品族接口
package design.pattern.abstractfactory;public interface Shape {void draw(); } package design.pattern.abstractfactory;public interface Color {void fill(); }第二步:創建產品類
package design.pattern.abstractfactory; /*** 矩形類* <br>類名:Rectangle<br>* 作者: mht<br>* 日期: 2018年3月21日-下午9:02:26<br>*/ public class Rectangle implements Shape{@Overridepublic void draw() {System.out.println("Rectangle drawing...");} } package design.pattern.abstractfactory; /*** 正方形類* <br>類名:Square<br>* 作者: mht<br>* 日期: 2018年3月21日-下午9:03:13<br>*/ public class Square implements Shape{@Overridepublic void draw() {System.out.println("Square drawing...");} } package design.pattern.abstractfactory; /*** 圓形類* <br>類名:Circle<br>* 作者: mht<br>* 日期: 2018年3月21日-下午9:03:43<br>*/ public class Circle implements Shape{@Overridepublic void draw() {System.out.println("Circle drawing...");} } package design.pattern.abstractfactory; /*** 紅色類* <br>類名:Red<br>* 作者: mht<br>* 日期: 2018年3月21日-下午9:04:23<br>*/ public class Red implements Color{@Overridepublic void fill() {System.out.println("Red filling....");} } package design.pattern.abstractfactory; /*** 綠色類* <br>類名:Green<br>* 作者: mht<br>* 日期: 2018年3月21日-下午9:05:08<br>*/ public class Green implements Color{@Overridepublic void fill() {System.out.println("Green filling...");} } package design.pattern.abstractfactory; /*** 藍色類* <br>類名:Blue<br>* 作者: mht<br>* 日期: 2018年3月21日-下午9:05:30<br>*/ public class Blue implements Color{@Overridepublic void fill() {System.out.println("Blue filling...");} }第三步:創建工廠族接口
package design.pattern.abstractfactory; /*** 工廠族接口* <br>類名:Factory<br>* 作者: mht<br>* 日期: 2018年3月21日-下午9:05:53<br>*/ public interface Factory {Object getPruduct(Class c); }第四步:創建工廠類
package design.pattern.abstractfactory; /*** 形狀工廠類* <br>類名:ShapeFactory<br>* 作者: mht<br>* 日期: 2018年3月21日-下午9:06:55<br>*/ public class ShapeFactory implements Factory{@Overridepublic Shape getPruduct(Class c) {if(c == null) return null;try {Shape shape = (Shape) c.newInstance();return shape;} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}return null;} } package design.pattern.abstractfactory; /*** 顏色工廠類* <br>類名:ColorFactory<br>* 作者: mht<br>* 日期: 2018年3月21日-下午9:07:29<br>*/ public class ColorFactory implements Factory{@Overridepublic Color getPruduct(Class c) {if(c == null) return null;try {Color color = (Color) c.newInstance();return color;} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}return null;} }第五步:創建工廠生成類
package design.pattern.abstractfactory; /*** 工廠生成類* <br>類名:FactoryProducer<br>* 作者: mht<br>* 日期: 2018年3月21日-下午9:08:08<br>*/ public class FactoryProducer {public static Factory getFactory(Class c){if(c == null) return null;try {Factory f = (Factory) c.newInstance();return f;} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();} return null;} }以上五步已經實現了抽象工廠模式,現在來測試一下:
package design.pattern.abstractfactory;public class testDemo {public static void main(String[] args) {// 創建形狀工廠Factory shapeFactory = FactoryProducer.getFactory(ShapeFactory.class);// 創建形狀產品Shape rect = (Shape) shapeFactory.getPruduct(Rectangle.class);Shape square = (Shape) shapeFactory.getPruduct(Square.class);Shape circle = (Shape) shapeFactory.getPruduct(Circle.class);// 使用產品rect.draw();square.draw();circle.draw();Factory colorFactory = FactoryProducer.getFactory(ColorFactory.class);Color red = (Color) colorFactory.getPruduct(Red.class);Color green = (Color) colorFactory.getPruduct(Green.class);Color blue = (Color) colorFactory.getPruduct(Blue.class);red.fill();green.fill();blue.fill();} }運行,輸出結果:
Rectangle drawing... Square drawing... Circle drawing... Red filling.... Green filling... Blue filling...結構圖:
?
總結
以上是生活随笔為你收集整理的Java常用设计模式————抽象工厂模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL忽略主键冲突,避免重复插入数据
- 下一篇: java美元兑换,(Java实现) 美元