抽象工厂模式 发表于 2018-04-02 | 更新于: 2018-04-02 | 分类于 设计模式 | | 阅读次数: | 字数统计: 489 | 阅读时长 ≈ 3 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155/* * Copyright,ShanNong Inc,2018 and onwards * * Author:fanghua fan */package com.fanghua.designpattrn.abstractfactory;public class AbstractFactoryPattern { public static void main(String[] args) { AbstractFactory sf = FactoryProducer.getFactory(FactoryType.ARTS_FACTORY); LiberalArts asf = sf.getArts(LiberalArtsType.HISTORY); asf.artsContent(); }}/** * 理科 */interface Science { void scienceContent();}/** * 文科 */interface LiberalArts { void artsContent();}/** * 数学分析 */class AnalysicsMath implements Science { public void scienceContent() { System.out.println("greate math!"); }}/** * 理论物理学 */class TheoreticalPhysics implements Science { public void scienceContent() { System.out.println("greate physics!"); }}/** * 历史学 */class History implements LiberalArts { public void artsContent() { System.out.println("beautiful history!"); }}/** * 政治学 */class Politics implements LiberalArts { public void artsContent() { System.out.println("beautiful politics!"); }}/** * 抽象工厂 */abstract class AbstractFactory { abstract Science getScience(ScienceType name); abstract LiberalArts getArts(LiberalArtsType name);}/** * 理科工厂 */class ScienceFactory extends AbstractFactory { Science getScience(ScienceType name) { switch (name) { case MATH: return new AnalysicsMath(); case PHYSICS: return new TheoreticalPhysics(); } return null; } LiberalArts getArts(LiberalArtsType name) { return null; }}/** * 文科工厂 */class LiberalArtsFactory extends AbstractFactory { Science getScience(ScienceType name) { return null; } LiberalArts getArts(LiberalArtsType name) { switch (name) { case HISTORY: return new History(); case POLITICS: return new Politics(); } return null; }}/** * 理科对象类型枚举 */enum ScienceType { MATH, PHYSICS}/** * 文科对象类型枚举 */enum LiberalArtsType { HISTORY, POLITICS}/** * 工厂类型 */enum FactoryType { SCIENCE_FACTORY, ARTS_FACTORY}/** * 工厂对象提供者 */class FactoryProducer { public static AbstractFactory getFactory(FactoryType choice) { switch (choice) { case SCIENCE_FACTORY: return new ScienceFactory(); case ARTS_FACTORY: return new LiberalArtsFactory(); } return null; }} (全文完)4/2/2018 9:09:08 PM 本文作者: 南风 本文链接: http://www.jackfan.top/posts/56455/ 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!