创建模式—简单工厂模式

一、简单工厂模式说明:

1.       简单工厂模式主要涉及到工厂角色(工厂类)、具体产品角色(具体产品类)和抽象产品角色(产品接口)三种。

2.       工厂角色在简单工厂模式中占有核心的地位,该类由客户端直接调用形成产品。通常由具体的Java类构成。

3.       抽象产品角色,通常由接口或者抽象类完成。

4.       具体的产品角色从抽象产品角色继承,在工厂类中被实例化,而它的实现细节被隐藏。

5.       简单工厂模式的结构图如下所示:

简单工厂模式

 

 

二、简单工厂模式设计:

例如,设计一个果园管理系统,果园中包括有苹果、葡萄、梨三种水果。

1.       首先可以定义一个水果接口:

package com.solid.simplefactory;

/**

 * 简单工厂模式(产品接口)

 * @author solid

 *

 */

public interface Fruit {

    //种植

    void grant();

    //生长

    void grow();

    //收获

    void harvest();

}

2.       具体的水果类(苹果、葡萄、梨):

package com.solid.simplefactory;

/**

 * 简单工厂模式(具体产品一)

 * @author solid

 *

 */

public class Apple implements Fruit {

   

    //苹果种植

    public void grant() {

       log("apple grant");

    }

   

    //苹果生长

    public void grow() {

       log("apple grow");

    }

 

    //苹果收获

    public void harvest() {

       log("apple harvest");

    }

   

    //公共方法

    public static void log(String str) {

       System.out.println(str);

    }

}

 

package com.solid.simplefactory;

/**

 * 简单工厂模式(具体产品二)

 * @author solid

 *

 */

public class Grape implements Fruit {

 

    //葡萄种植

    public void grant() {

       log("grape grant");

    }

   

    //葡萄生长

    public void grow() {

       log("grape grow");

    }

 

    //葡萄收获

    public void harvest() {

       log("grape harvest");

    }

   

    //公共方法

    public static void log(String str) {

       System.out.println(str);

    }

}

 

package com.solid.simplefactory;

/**

 * 简单工厂模式(具体产品三)

 * @author solid

 *

 */

public class Pear implements Fruit {

 

    //梨种植

    public void grant() {

       log("pear grant");

    }

   

    //梨生长

    public void grow() {

       log("pear grow");

    }

 

    //梨收获

    public void harvest() {

       log("pear harvest");

    }

   

    //公共方法

    public static void log(String str) {

       System.out.println(str);

    }

}

3.       工厂类:

package com.solid.simplefactory;

/**

 * 简单工厂模式(工厂类)

 * @author solid

 *

 */

public class FruitFactory {

   

    public static Fruit factory(String fruit) throws BadFruitException {

       if(fruit.equalsIgnoreCase("apple")) {

           return new Apple();

       } else if(fruit.equalsIgnoreCase("grape")) {

           return new Grape();

       } else if(fruit.equalsIgnoreCase("Pear")) {

           return new Pear();

       } else {

           throw new BadFruitException("BadFruit request");

       }

    }

}

4.       异常类:

package com.solid.simplefactory;

/**

 * 简单工厂模式(异常类)

 * @author solid

 *

 */

public class BadFruitException extends Exception {

 

    public BadFruitException(String message) {

       System.out.println("sorry, " + message);

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值