码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式:抽象工厂模式

时间:2014-12-05 22:48:01      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:工厂模式   设计模式   

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

Creational 模式

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


抽象工厂模式

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

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

下面时类图

bubuko.com,布布扣

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 !


设计模式:抽象工厂模式

标签:工厂模式   设计模式   

原文地址:http://blog.csdn.net/speedme/article/details/41758565

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!