抽象工厂模式

原创 2006年06月19日 22:44:00
 

提供一个创建一系列相关或相互依赖的对象的接口,而不需指定它们具体的类。

通常在run-time式创建一个ConcreateFactory类的单体实例。这个ConcreteFactory创建ConcreteProduct对象。为了创建不同的ConcreteProduct对象,clients需要使用不同的ConcreteFactory

AbstractFactoryContinentFactory

定义一个接口,用来创建抽象products

ConcreteFactoryAfrciaFactory,AmericaFactory

实现创建具体的Products

AbstractProductHerbivoreCarnivore

 

 

 

声明一个接口表示一种product类型

 

 

 

ProductWildebeestLionBisonWolf

 

 

 

定义被相关Concrete factory创建的product对象

 

 

 

实现AbstractProduct接口

 

 

 

ClientAnimalWorld

 

 

 

使用AbstractFactoryAbstractProduct

 

 

 

 

 

 

代码:

 

 

 

//AbstractFactory

 

 

 

public interface ContinentFactory{

 

 

 

            public Herbivore CreateHerbivore();

 

 

 

            public Carnivore CreateCarnivore();

 

 

 

}

 

 

 

 

 

 

//ConcreteFactory

 

 

 

public class AfricaFactory implements ContinentFactory{

            public Herbivore CreateHerbivore(){

 

 

 

                        return new Wildebeest();

 

 

 

            }

 

 

 

            public Carnivore CreateCarnivore(){

 

 

 

                        return new Lion();

 

 

 

            }

 

 

 

}

 

 

 

 

 

 

public class AmericaFactory implements ContinentFactory{

            public Herbivore CreateHerbivore(){

 

 

 

                        return new Bison();

 

 

 

            }

 

 

 

            public Carnivore CreateCarnivore(){

 

 

 

                        return new Wolf();

            }

}

 

 

 

//AbstractProduct

 

 

 

public interface Herbivore{

 

 

 

}

 

 

 

 

 

 

public interface Carnivore{

 

 

 

            public void Eat(Herbivore h);

 

 

 

}

 

 

 

 

 

 

//Product

 

 

 

public class Wildebeest implements Herbivore{

}

 

 

 

public class Lion implements Carnivore{

 

 

 

            public void Eat(Herbivore h){

                        System.out.println(“Lion eats “ +h.getName());

            }                     

}

 

 

 

public class Bison implements Herbivore{

}

 

 

 

public class Wolf implements Carnivore{

            public void Eat(Herbivore h){

                        System.out.println(“Wolf eats “ +h.getName());

            }

}

 

 

 

//Client

public class AnimalWorld{

            private Herbivore herbivore;

            private Carnivore carnivore;

 

 

 

            public AnimalWorld(ContinentFactory factory){

 

 

 

                        carnivore=factory. CreateCarnivore();

 

 

 

                        herbivore=factory. CreateHerbivore();

 

 

 

            }

 

 

 

            //Mehtods

 

 

 

            public void RunFoodChain(){

 

 

 

                        carnivore.Eat(herbivore);

            }

            public static void  main(String[] args){

                        AnimalWorld world=new AnimalWorld(new AfricaFactory());

                        world.RunFoodChain();

                       

                        world=new AnimalWorld(new AmericaFactory());

                        world.RunFoodChain();

}

 

 

 

Output

 

 

 

Lion eats Wildebeest
Wolf eats Bison

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

抽象工厂模式的优缺点

优点: 1、抽象工厂模式隔离了具体类的生产,使得客户并不需要知道什么被创建。 2、当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。 3、增加新的具体工厂...
  • tayanxunhua
  • tayanxunhua
  • 2012年12月01日 11:13
  • 11250

结合Java反射用简单工厂模式改进抽象工厂模式

前一篇简单介绍了抽象工厂模式,结合Java的反射机制,可以用简单工厂模式来改进抽象工厂模式,减少类的数量,增加可维护性。UML图如下: 去除IFactory、SqlserverFacto...
  • sdauzxl
  • sdauzxl
  • 2016年08月20日 12:01
  • 1004

C# 设计模式 之 抽象工厂模式

        工厂方法模式在于需要根据条件来控制对哪个类进行实例化,而抽象工厂模式确定实例化的往往设计到多个类,目的是创建一组相关或者相互依赖的对象提供支持!重点就是在于处理一组相关或者相互依赖类!...
  • scucj
  • scucj
  • 2007年09月23日 01:12
  • 2781

抽象工厂模式(五):“开闭原则”的倾斜性,抽象工厂模式总结

5 “开闭原则”的倾斜性        Sunny公司使用抽象工厂模式设计了界面皮肤库,该皮肤库可以较为方便地增加新的皮肤,但是现在遇到一个非常严重的问题:由于设计时考虑不全面,忘记为单选按钮(...
  • Mark_LQ
  • Mark_LQ
  • 2015年04月19日 21:42
  • 897

javascript 对象创建 之 抽象工厂模式

// javascript 对象创建 之 抽象工厂 // 工厂模式,工厂对象创建对象 // 抽象工厂模式,工厂创建一个主题——只创建包含指定的属性、方法的类的实例。 //产品抽象 function ...
  • hatmore
  • hatmore
  • 2014年03月12日 20:25
  • 1112

设计模式--抽象工厂模式(C++实现)

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 ...
  • My_heart_
  • My_heart_
  • 2017年03月14日 19:40
  • 263

Java 抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是工厂方法模式的进一步抽象,其英文原话"Provide an interface for creating families of re...
  • liruikqn
  • liruikqn
  • 2013年10月20日 21:08
  • 22163

设计模式——抽象工厂模式详解

0.前言写在最前面,本人的设计模式类博文,建议先看博文前半部分的理论介绍,再看后半部分的实例分析,最后再返回来复习一遍理论介绍,这时候你就会发现我在重点处标红的用心,对于帮助你理解设计模式有奇效哦~无...
  • SEU_Calvin
  • SEU_Calvin
  • 2016年08月21日 17:05
  • 10485

Java设计模式—工厂方法模式&抽象工厂模式

工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式。 通用类图如下:         在工厂方法模式中,抽象产品类Product负责定义产品的共性,实现对事物最抽象的定义;C...
  • qq_25827845
  • qq_25827845
  • 2016年09月11日 15:07
  • 4694

Java实现抽象工厂模式+java的反射的机制

Java的反射机制:       JAVA反射机制是就是运行的状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态...
  • qq_16558621
  • qq_16558621
  • 2016年03月16日 20:18
  • 1878
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:抽象工厂模式
举报原因:
原因补充:

(最多只允许输入30个字)