首页 > 代码库 > 设计模式:抽象工厂模式

设计模式:抽象工厂模式

原文地址:http://leihuang.org/2014/12/03/abstract-factory/

Creational 模式

物件的产生需要消耗系统资源,所以如何有效率的产生、管理 与操作物件,一直都是值得讨论的课题, Creational 模式即与物件的建立相关,在这个分类下的模式给出了一些指导原则及设计的方向。下面列举到的全属于Creational 模式

  • Simple Factory 模式
  • Abstract Factory 模式
  • Builder 模式
  • Factory Method 模式
  • Prototype 模式
  • Singleton 模式
  • Registry of Singleton 模式

抽象工厂模式

前面我们讲了简单工厂模式,那里我们将电影分为动作片和爱情片,那么电影有便宜的有贵的之分,此时观众提出要求,我只看便宜的动作片,有些要看贵的电影片,那么照我们前面简单工厂就不够用了.

怎么办呢,观众要求变复杂了,那么我们只有让工厂也复杂起来,Fox公司(IFoxFilmFactory)下面分为两个部门,生产贵电影的部门(ExpensiveFilmFactory),生产便宜电影的部门(EconomicFilmFactory).此时电影分类也复杂了,动作片(IActionMovie)有贵的(ExpensiveActionMovie),有便宜的(EconomicActionMovie),爱情片(ILoveMovie)有贵的(ExpensiveLoveMovie),有便宜的(EconomicLoveMovie).

下面时类图

img

IActionMovie 接口 --动作片

public interface IActionMovie {
    public void playAction() ;
}

ILoveMovie 接口 --爱情片

public interface ILoveMovie {
    public void playLove() ;
}

ExpensiveActionMovie 类 --贵的动作片

public class ExpensiveActionMovie implements IActionMovie {
    @Override
    public void playAction() {
        System.out.println("贵的-哼哼哈兮!");
    }
}

EconomicActionMovie 类 --便宜的动作片

public class EconomicActionMovie implements IActionMovie {
    @Override
    public void playAction() {
        System.out.println("便宜-哼哼哈兮!");
    }
}

ExpensiveLoveMovie 类 --贵的爱情片

public class ExpensiveLoveMovie implements ILoveMovie {
    @Override
    public void playLove() {
        System.out.println("贵的-爱老虎油!");
    }
}

EconomicLoveMovie 类 --便宜的爱情片

public class EconomicLoveMovie implements ILoveMovie {
    @Override
    public void playLove() {
        System.out.println("便宜-爱老虎油!");
    }
}

IFoxFilmFactory 接口 --Fox总工厂

public interface IFoxFilmFactory {
    public IActionMovie getActionMovie() ;
    public ILoveMovie getLoveMovie() ;
}

ExpensiveFilmFactory 类 --生产贵电影的部门

public class ExpensiveFilmFactory implements IFoxFilmFactory {
    @Override
    public IActionMovie getActionMovie() {
        return new ExpensiveActionMovie();
    }

    @Override
    public ILoveMovie getLoveMovie() {
        return new ExpensiveLoveMovie();
    }
}

EconomicFilmFactory 类 --生产便宜电影的部门

public class EconomicFilmFactory implements IFoxFilmFactory {
    @Override
    public IActionMovie getActionMovie() {
        return new EconomicActionMovie();
    }

    @Override
    public ILoveMovie getLoveMovie() {
        return new EconomicLoveMovie();
    }
}

AudienceClient 类 --观众

public class AudienceClient {
    public static void main(String[] args) {
        IFoxFilmFactory fox1 = new EconomicFilmFactory() ;
        fox1.getActionMovie().playAction();
        fox1.getLoveMovie().playLove();

        IFoxFilmFactory fox2 = new ExpensiveFilmFactory() ;
        fox2.getActionMovie().playAction();
        fox2.getLoveMovie().playLove();

        /* print
         * 便宜-哼哼哈兮!
         * 便宜-爱老虎油!
         * 贵的-哼哼哈兮!
         * 贵的-爱老虎油!
         */
    }
}


2014-12-03 16:50:20

Brave,Happy,Thanksgiving !


设计模式:抽象工厂模式