简单工厂模式

本文深入探讨了Java中简单工厂模式的概念、组成要素及其在实际编程中的应用,通过具体代码实例展示了如何实现简单工厂模式,以及其优缺点分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工厂模式在《Java与模式》中分为三类:
1)简单工厂模式(Simple Factory)
2)工厂方法模式(Factory Method)
3)抽象工厂模式(Abstract Factory) 
      这三种模式从上到下逐步抽象,并且更具一般性。 
      GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)。将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。

简单工厂模式是类的创建模式,又叫静态工厂方法模式,是由一个工厂对象决定创建出哪一种产品类的实例。
    简单工厂模式就是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例,涉及到工厂角色、抽象产品角色以及具体产品角色。
    1 工厂类角色:担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的商业逻辑关系。工厂类在客户端直接调用下创建产品对象,它往往由一个具体Java类实现。
    2 抽象产品角色:担任这个角色的类是由工厂方法模式所创建的对象的父类,或它们共同拥有的接口。抽象产品角色可以用一个Java接口或者Java抽象类实现。
    3 具体产品角色:工厂方法模式所创建的任何对象都是这个角色的实例,具体产品角色由一个具体Java类实现。

下面是简单工厂模式的简单实现:

package com.dxz.pattern.simplefactory;

 

public interface Fruit {

    /**

     * 生长

     */

    void grow();

 

    /**

     * 收获

     */

    void harvest();

 

    /**

     * 种植

     */

    void plant();

}

package com.dxz.pattern.simplefactory;

 

public class Apple implements Fruit {

 

    @Override

    public void grow() {

       System.out.println("苹果在成长!");

    }

 

    @Override

    public void harvest() {

       System.out.println("苹果大丰收!");

    }

 

    @Override

    public void plant() {

       System.out.println("播种苹果!");

    }

 

}

package com.dxz.pattern.simplefactory;

 

public class Grape implements Fruit {

 

    @Override

    public void grow() {

       System.out.println("葡萄在成长!");

    }

 

    @Override

    public void harvest() {

       System.out.println("葡萄大丰收!");

    }

 

    @Override

    public void plant() {

       System.out.println("播种葡萄!");

    }

 

}

package com.dxz.pattern.simplefactory;

 

public class Orange implements Fruit {

 

    @Override

    public void grow() {

       System.out.println("橘子在成长!");

    }

 

    @Override

    public void harvest() {

       System.out.println("橘子大丰收!");

    }

 

    @Override

    public void plant() {

       System.out.println("播种橘子!");

    }

 

}

package com.dxz.pattern.simplefactory;

 

public class FruitFactory {

    /**

     * 静态工厂方法(简单工厂方法)

     * @param msg

     * @return

     */

    public static Fruit getFruit(String msg) {

       if (msg.equals("Apple")) {

           return new Apple();

       } else if (msg.equals("Orange")) {

           return new Orange();

       } else if (msg.equals("Grape")) {

           return new Grape();

       }

 

       return null;

    }

}

package com.dxz.pattern.simplefactory;

 

public class MainClass {

 

    /**

     * @param args

     */

    public static void main(String[] args) {

       // TODO Auto-generated method stub

       String msg = "Apple";

       Fruit fruit = FruitFactory.getFruit(msg);

       fruit.grow();

       fruit.harvest();

       fruit.plant();

    }

 

}

简单工厂模式的优点和缺点:

在这个模式中,工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。
不难发现,简单工厂模式的缺点也正体现在其工厂类上,由于工厂类集中了所有实例的创建逻辑,所以“高内聚”方面做的并不好。另外,当系统中的具体产品类不断增多时,可能会出现要求工厂类也要做相应的修改,扩展性并不很好。

 

转载于:https://www.cnblogs.com/duanxz/archive/2012/05/28/2522679.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值