`

理解工厂模式

 
阅读更多

简单工厂模式(转自http://www.iteye.com/topic/26455)

 

1. 目的 
        工厂模式就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式。它定义一个用于创建对象的接口,由子类决定实例化哪一个类。
2 . 简单工厂模式的结构 
 http://zhupan.iteye.com/upload/picture/pic/2305/0e1d5f00-1c49-4e5f-9c2c-986d989217bd.gif

 

3. 一个简单例子
 
    // 产品接口         
    public interface Product {   
      
        public void getName();   
      
    }   
      
    // 具体产品A   
    public class ProductA implements Product {   
      
        public void getName() {   
            System.out.println("  I am ProductA  ");   
        }   
      
    }   
      
    // 具体产品B   
    public class ProductB implements Product {   
      
        public void getName() {   
            System.out.println("  I am ProductB  ");   
        }   
      
    }   
      
    // 工厂类   
    public class ProductCreator {   
      
        public Product createProduct(String type) {   
            if (" A ".equals(type)) {   
                return new ProductA();   
            }   
            if (" B ".equals(type)) {   
                return new ProductB();   
            } else  
                return null;   
        }   
      
        public static void main(String[] args) {   
            ProductCreator creator = new ProductCreator();   
            creator.createProduct(" A ").getName();   
            creator.createProduct(" B ").getName();   
        }   
    }   

 
4. 小结工厂模式的适用范围
• 在编码时不能预见需要创建哪一种类的实例。
• 一个类使用它的子类来创建对象。
• 开发人员不希望创建了哪个类的实例以及如何创建实例的信息暴露给外部程序。  

 

 

 

抽象工厂模式 

 

1. 抽象工厂模式可以说是简单工厂模式的扩展,它们主要的区别在于需要创建对象的复杂程度上。
在抽象工厂模式中,抽象产品可能是一个或多个,从而构成一个或多个产品族。 在只有一个产品族的情况下,抽象工厂模式实际上退化到工厂方法模式。
2. 抽象工厂模式的结构 

 

 http://zhupan.iteye.com/upload/picture/pic/2304/aa2dfa0b-cd37-4bfc-a411-dd75ee60ab5f.gif

 

3. 一个简单例子

 

 

    //  产品 Plant接口         
    public interface Plant {   
    }   
      
    // 具体产品PlantA,PlantB   
    public class PlantA implements Plant {   
      
        public PlantA() {   
            System.out.println(" create PlantA ! ");   
        }   
      
        public void doSomething() {   
            System.out.println("  PlantA do something  ");   
        }   
    }   
      
    public class PlantB implements Plant {   
        public PlantB() {   
            System.out.println(" create PlantB ! ");   
        }   
      
        public void doSomething() {   
            System.out.println("  PlantB do something  ");   
        }   
    }   
      
    // 产品 Fruit接口   
    public interface Fruit {   
    }   
      
    // 具体产品FruitA,FruitB   
    public class FruitA implements Fruit {   
        public FruitA() {   
            System.out.println(" create FruitA ! ");   
        }   
      
        public void doSomething() {   
            System.out.println("  FruitA do something  ");   
        }   
    }   
      
    public class FruitB implements Fruit {   
        public FruitB() {   
            System.out.println(" create FruitB ! ");   
        }   
      
        public void doSomething() {   
            System.out.println("  FruitB do something  ");   
        }   
    }   
      
    // 抽象工厂方法   
    public interface AbstractFactory {   
        public Plant createPlant();   
      
        public Fruit createFruit();   
    }   
      
    // 具体工厂方法   
    public class FactoryA implements AbstractFactory {   
        public Plant createPlant() {   
            return new PlantA();   
        }   
      
        public Fruit createFruit() {   
            return new FruitA();   
        }   
    }   
      
    public class FactoryB implements AbstractFactory {   
        public Plant createPlant() {   
            return new PlantB();   
        }   
      
        public Fruit createFruit() {   
            return new FruitB();   
        }   
    }   

 

4. 小结
在以下情况下,应当考虑使用抽象工厂模式。
  首先,一个系统应当不依赖于产品类实例被创立,组成,和表示的细节。这对于所有形态的工厂模式都是重要的。
  其次,这个系统的产品有多于一个的产品族。
  第三,同属于同一个产品族的产品是设计成在一起使用的。这一约束必须得在系统的设计中体现出来。
  最后,不同的产品以一系列的接口的面貌出现,从而使系统不依赖于接口实现的细节。
  其中第二丶第三个条件是我们选用抽象工厂模式而非其它形态的工厂模式的关键性条件。

分享到:
评论

相关推荐

    深入理解工厂模式 1

    1. 工厂(Factory)角色 :简单工厂模式的核心,它负责实现创建所有实例的内部逻辑 2. 抽象产品(Product)角色 :简单工厂模式所创建的所有对象的

    深入了解工厂模式&工厂方法&抽象工厂

    介绍工厂模式,工厂方法和抽象工厂。三个模式的适应情况,以及其区别。

    设计模式之三种工厂模式

    三种工厂模式的样例代码,让你轻松理解工厂模式

    工厂模式详细介绍大全

    比较系统的,详细的介绍了设计模式之一的工厂模式,能帮你很好的理解工厂模式

    java 简单工厂模式 源代码

    从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂...简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现,学习了此模式可以为后面的很多中模式打下基础。

    设计模式-抽象工厂模式(讲解及其实现代码)

    设计模式-抽象工厂模式(讲解及其实现代码)

    工厂模式与面向接口编程例子

    通过本例子理解工厂模式和面向接口编程,并更好理解接口的使用

    工厂模式java代码

    工厂模式有:简单工厂模式;工厂方法模式;抽象工厂模式。抽象的程度越来越强,给出了三种模式的java代码,想完全理解还要仔细研究。

    简单工厂模式,工厂方法模式,抽象工厂模式和Proxy模式

    从简单工厂,到工厂方法到抽象工厂,这几种都带有“工厂”的模式,总是容易叫人迷糊,我仔细研究了下,然后用简单的例子做类比,列出了自己的通俗理解和比较,大部分是自己的体会,感觉理的比较清楚,末尾提了下...

    简单工厂模式小应用

    简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。 结合简单工厂模式 完成的小应用

    23种设计模式之抽象工厂模式Java示例代码

    本文介绍了抽象工厂模式的定义、使用场景、主要角色以及相应的类图,并提供了Java示例代码以帮助读者更好地理解该模式的实现方法。抽象工厂模式为创建一组相关或相互依赖的对象提供了一个接口,而不需要指定它们的...

    设计模式_简单工厂模式

    简单工厂模式的C++实例源码。适合初学者集合教程理解简单工厂模式。

    设计模式-抽象工厂模式

    能让你最快上手,最容易理解抽象工厂模式,并能在实际中运用

    工厂模式和反射

    工厂模式 这个例子让你更加的理解工厂模式和反射的应用 --------动态的创建对象

    .NET 抽象工厂模式Demo

    抽象工厂模式demo,本demo很简单,纯粹是一个思路。不理解抽象工厂模式的可以助于你的理解,如果写的不好请见谅。 .NET;

    工厂模式详解

    工厂模式 其实就这么简单!理解工厂模式就能够很好的理解ioc了

    设计模式_工厂方法模式

    工厂方法模式的C++实现,有助于初学者结合教程理解工厂方法模式。

    标准工厂模式三层结构

    呵呵,废话不多说了,这个51没啥事做,就把我对三层结构和工厂模式的理解做了一个例子,很详尽的用代码方式展示给大家,不管是在代码编写上还是架构上都十分详细,要是你觉得小弟有什么做的不好的或者不完善的地方...

    简单工厂模式_Test.rar

    建立一个工厂类,对实现了同一接口的一些类进行实例的创建。 基于C#语言的工厂模式程序范例,可以帮助初学C#人更好地理解工厂模式。

    c++工厂模式

    使用vs2015平台,对三种工厂模式使用了C++进行测试实现,并且内含说明文档。 能够很好的理解设计模式之工厂模式。

Global site tag (gtag.js) - Google Analytics