Java 设计模式-简单工厂(Simple Factory)

本文介绍了Java设计模式中的简单工厂模式,这是一种类创建模式,用于封装对象的创建过程,强调消费者只需指定参数即可获取相应实例。简单工厂模式具有封装实例化过程和职责划分明确的优点。
摘要由CSDN通过智能技术生成

   Java 设计模式-模板方法模式(Template Method)

   Java 设计模式-装饰器模式(Decorator)

   Java 设计模式-代理模式(Proxy Pattern)

   Java 设计模式-单例模式(Singleton)

   Java 设计模式-简单工厂(Simple Factory)

   Java 设计模式-工厂方法(Factory Method)

   Java 设计模式-原型模式(Prototype)

   Java 设计模式-适配器模式(Adapter)

   ​​​​​​Java 设计模式-桥接模式(Bridge)

  Java 设计模式-策略模式(Strategy Pattern)

  Java 设计模式-命令模式(Command Pattern)

  Java 设计模式-观察者(Observer )


  简单工厂模式是类的创建模式,又叫做静态工厂方法模式(Static Factory Method Pattern)

   目的: 封装对象的创建过程,用户只需要传入指定的参数即可获取相应的实例。

   优点:封装了实例的创建过程,客户端只需要消费实例;进行了责任分割。

有一个水果店,中出售两种水果;一种是苹果,一种是橘子;客户只需要指定自己需要的什么什么类型的苹果或者橘子就可以了,而不必知道这些水果是怎么种植,运输加工的。

   

  

/**
 * 水果接口
 * @author Lenovo
 * @version $Id: Fruit.java, v 0.1 2014年9月20日 下午4:42:48 Lenovo Exp $
 */
public interface Fruits {

    /**
     * 获取水果的名称
     *
     * @return 水果的名称
     */
    public String getName();

}

/**
 * 定义苹果类
 * @author Lenovo
 * @version $Id: Apple.java, v 0.1 2014年9月20日 下午4:45:18 Lenovo Exp $
 */
public class Apple implements Fruits {
    /**
     * 水果的名称
     */
    private String name;

    /**
     * Getter method for property <tt>name</tt>.
     *
     * @return property value of name
     */
    public String getName() {
        return name;
    }

    /**
     * Setter method for property <tt>name</tt>.
     *
     * @param name value to be assigned to property name
     */
    public void setName(String name) {
        this.name = name;
    }

    public Apple(String name) {
        super();
        this.name = name;
    }

}


/**
 *
 * @author Lenovo
 * @version $Id: Orange.java, v 0.1 2014年9月20日 下午4:53:58 Lenovo Exp $
 */
public class Orange implements Fruits {
    /**
     * 橘子的名称
     */
    String name;

    /**
     * Getter method for property <tt>name</tt>.
     *
     * @return property value of name
     */
    public String getName() {
        return name;
    }

    /**
     * Setter method for property <tt>name</tt>.
     *
     * @param name value to be assigned to property name
     */
    public void setName(String name) {
        this.name = name;
    }

    public Orange(String name) {
        super();
        this.name = name;
    }

}

/**
 *
 * 水果简单工厂
 * 简单工厂模式,就是根据传入的参数决定创建出哪一个产品
 *
 * 优点:
 *  简单工厂模式的核心就是工厂类。 这个类包含必要的逻辑判断,可以决定在什么时候创建什么产品;而客户端则可以免除直接创建产品的对象
 *  的责任,而仅仅负责消费产品。
 *  缺点:
 *   当产品类有多层次的等级结构时,只有工厂类以不变应万变。
 *   由于简单工厂模式使用的是静态方法作为工厂方法,而静态方法无法由子类继承,因此工厂角色无法形成基于继承的等级结构。
 * @author Lenovo
 * @version $Id: FruitFactory.java, v 0.1 2014年9月20日 下午4:41:53 Lenovo Exp $
 */
public class FruitFactory {

    enum FRUITS {
        APPLE, ORANGE;
    }

    public static Fruits factory(FRUITS type) {
        switch (type) {
            case APPLE:
                return new Apple("花牛苹果");
            case ORANGE:
                return new Orange("秋山蜜柑");
            default:
                throw new UnsupportedOperationException();
        }
    }
}

/**
 *
 * @author Lenovo
 * @version $Id: Client.java, v 0.1 2014年9月20日 下午5:00:10 Lenovo Exp $
 */
public class Client {
    public static void main(String[] args) {
        Fruits f = FruitFactory.factory(FRUITS.APPLE);
        LoggerUtils.info(f.getName());

        Fruits orange = FruitFactory.factory(FRUITS.ORANGE);
        LoggerUtils.info(orange.getName());
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈脩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值