Java设计模式--工厂模式

一、工厂模式的简介:

	工厂模式的作用:为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽起来,达到提高灵活性的目的。
	 工厂模式分类:
		1)简单工厂模式(Simple Factory):不利于产生系列产品
		2)工厂方法模式(Factory Method):又称为多形性工厂;
		3)抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族,但不利于产生新的产品

二、简单工厂模式

简单工厂模式又称静态工厂方法模式,目的是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式。它定义一个用于创建对象的接口,由子类决定实例化哪一个类。
适用范围:
1、在编码时不能预见需要创建哪一种类的实例。
2、一个类使用他的子类来创建对象
3、开发人员,不希望创建了哪个类的实例以及如何创建实例的信息暴露给外部程序
结构图:

例子:
</pre><pre name="code" class="java">// 产品接口         
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();   
    }   
}  

三、工厂方法模式

工厂方法模式是简单工厂模式的进一步抽象化和推广,工厂方法模式里不再只由一个工厂类决定那一个产品类应当被实例化,这个决定被交给抽象工厂的子类去做。
工厂方法模式和简单工厂模式在定义上的不同是很明显的。工厂方法模式的核心是一个抽象工厂类,而不像简单工厂模式, 把核心放在一个实类上。工厂方法模式可以允许很多实的工厂类从抽象工厂类继承下来, 从而可以在实际上成为多个简单工厂模式的综合,从而推广了简单工厂模式。 
反过来讲,简单工厂模式是由工厂方法模式退化而来。设想如果我们非常确定一个系统只需要一个实的工厂类, 那么就不妨把抽象工厂类合并到实的工厂类中去。而这样一来,我们就退化到简单工厂模式了。

四、抽象工厂模式

1. 抽象工厂模式可以说是简单工厂模式的扩展,它们主要的区别在于需要创建对象的复杂程度上。 
在抽象工厂模式中,抽象产品可能是一个或多个,从而构成一个或多个产品族。 在只有一个产品族的情况下,抽象工厂模式实际上退化到工厂方法模式。 
2. 抽象工厂模式的结构 
http://zhupan.iteye.com/upload/picture/pic/2304/aa2dfa0b-cd37-4bfc-a411-dd75ee60ab5f.gif
//抽象产品角色
public interface Moveable {
    void run();
}
//具体产品角色
public class Plane implements Moveable {
    @Override
    public void run() {
        System.out.println("plane....");
    }
}

public class Broom implements Moveable {
    @Override
    public void run() {
        System.out.println("broom.....");
    }
}

//抽象工厂
public abstract class VehicleFactory {
    abstract Moveable create();
}
//具体工厂
public class PlaneFactory extends VehicleFactory{
    public Moveable create() {
        return new Plane();
    }
}
public class BroomFactory extends VehicleFactory{
    public Moveable create() {
        return new Broom();
    }
}
//测试类
public class Test {
    public static void main(String[] args) {
        VehicleFactory factory = new BroomFactory();
        Moveable m = factory.create();
        m.run();
    }
}

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

  



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值