1 / 34
文档名称:

简单工厂模式与工厂模式和抽象工厂模式.doc

格式:doc   大小:317KB   页数:34页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

简单工厂模式与工厂模式和抽象工厂模式.doc

上传人:1314042**** 2021/2/2 文件大小:317 KB

下载得到文件列表

简单工厂模式与工厂模式和抽象工厂模式.doc

文档介绍

文档介绍:2006-12-03 14:33:04
 标签:java 设计模式 
11 简单工厂(Simple Factory)模式
简单工厂模式是类的创建,又叫静态工厂方法(Static Factory Methord)模式。简单工厂模式是由一个工厂对象决定创造哪一种产品类的实例。
 
111 工厂模式的几种形态
工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态的决定将哪一个类实例化,工厂模式有以下几种形态:
 l简单工厂(Simple Factory)模式:又称静态工厂方法(Static Factory Methord)模式。
 l工厂方法(Factory Method)模式:又称多态性工厂(Polymorphic Factory)模式或虚拟构造子(Virtual Constructor)模式。
 l抽象工厂(Abstract Factory)模式:又称工具箱(Kit或Toolkit)模式。
下图所示的就是简单工厂模式的简略类图。
简单工厂模式,或称静态工厂方法模式,是不同工厂方法模式的一个特殊实现。在Java语言中,通常的工厂方法模式不能通过设计功能的退化给出静态工厂方法模式。
 
112 简单工厂模式的引进(一般模式)
比如有一个农场,生产各种水果,有苹果(Apple)、草莓(Strawberry)、葡萄(Grape);农场的园丁(FruitGardener)要根据客户的需求,提供相应的水果。下面看看是如何用简单工厂模式实现这个过程的,如下图:
 
此模式的实现源码如下:
 
1121 产品接口-水果接口:Fruitjava
package comlavasoftpatternssimplefactoryybgc;
/**
 * Created by IntelliJ IDEA
 * FileName:Fruitjava
 * User:    LavaSoft
 * Date:    2006-12-1
 * Time:    0:26:51
 * 《Java与模式》(--阎宏博士著)读书笔记
 * 工厂模式模式--简单工厂模式--一般模式
 * ReadMe:  抽象产品角色:工厂的水果产品接口--水果
 */
public interface Fruit {
    /**
     * 种植
     */
    void plant();
    /**
     * 生长
     */
    void grow();
    /**
     * 收获
     */
    void harvest();
}
 
1122 产品-平果类:Applejava
package comlavasoftpatternssimplefactoryybgc;
/**
 * Created by IntelliJ IDEA
 * FileName:Applejava
 * User:    LavaSoft
 * Date:   
2006-12-1
 * Time:    0:47:25
 * 《Java与模式》(--阎宏博士著)读书笔记
 * 工厂模式模式--简单工厂模式--一般模式
 * ReadMe:  水果工厂的产品:苹果
 */
public class Apple implements Fruit {
    private int treeAge;
    /**
     * 种植
     */
    public void plant() {
        Systemoutprintln("Apple has been planted");
    }
    /**
     * 生长
     */
    public void grow() {
        Systemoutprintln("Apple is growing");
    }
    /**
     * 收获
     */
    public void harvest() {
        Systemoutprintln("Apple has been harvested");
    }
    /**
     * ***@return 返回树龄
     */
    public int getTreeAge() {
        return treeAge;
    }
    /**
     * 设置树龄
     */
    public void setTreeAge(i