目录

前言

一、简单工厂模式

二、农场系统创建

1.先新建一个包、类以及抽象类

2.键入各类中代码

1 抽象产品角色  Fruit

2 实现产品角色  Apple

3实现产品角色  Grape

4实现产品角色  Strawberry  (后面的步骤和前面一致  我就不一一截图了)

5工厂角色  FruitGardener

6输入异常处理  Bad FruitException

7客户端  Client

三、在主方法运行

总结


前言

对于产品种类相对较少的情况,考虑使用简单工厂模式。使用简单工厂模式的客户端需要传入工厂类的参数,不需要关系如何创建对象的逻辑,可以很方便地创建所需产品。下面我们来使用简单工厂模式创建一个农场管理系统


一、简单工厂模式

简单工厂模式中创建实例的方法通常为静态方法,因此简单工厂模式(Simple Factory Pattern)又叫作静态工厂方法模式(Static Factory Method Pattern)。

简单工厂模式的主要角色如下:

  • 简单工厂:简单工厂模式的核心,负责实现创建所有实例的内部逻辑。工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。
  • 抽象产品:简单工厂创建的所有产品的父类,负责描述所有实例共有的公共接口。
  • 具体产品:由简单工厂进行创建的具体类。

二、农场系统创建

1.先新建一个包、类以及抽象类

package : com.simokeFactory.fruit;

抽象产品角色 抽象类 Fruit
实现产品角色 普通类 Apple
实现产品角色 普通类 Grape
实现产品角色 普通类 Strawberry
工厂角色 普通类 FruitGardener
输入异常处理 普通类 Bad FruitException
客户端 普通类 Client

2.键入各类中代码

抽象产品角色  Fruit

package com.simpleFactory.fruit;public interface Fruit {/*****生长*****/void grow();/*****收获*****/void harvest();/*****种植*****/void plant();
}

实现产品角色  Apple

package com.simpleFactory.fruit;
public class Apple implements Fruit {private int treeAge;@Overridepublic void grow() {log("苹果正在生长中,请耐心等待...");}@Overridepublic void harvest() {log("苹果已到收获季,请收获...");}@Overridepublic void plant() {log("苹果可以种植,请悉心照料...");}private static void log(String msg) {System.out.println(msg);}public int getTreeAge() {return treeAge;}public void setTreeAge(int treeAge) {this.treeAge = treeAge;}
}

3实现产品角色  Grape

package com.simpleFactory.fruit;import java.awt.*;public class Grape implements Fruit{boolean seedless;@Overridepublic void grow() {Display("葡萄正在生长中,请等待......");}@Overridepublic void harvest() {Display("葡萄已到收获季,请收获......");}@Overridepublic void plant() {Display("葡萄可以种植,请悉心照料......");}private static void Display(String msg) {System.out.println(msg);}public boolean getSeedless() {return seedless;}public void setSeedless(boolean seedless) {this.seedless = seedless;}}

4实现产品角色  Strawberry  (后面的步骤和前面一致  我就不一一截图了)

package com.simpleFactory.fruit;public class Strawberry implements Fruit{@Overridepublic void grow() {Display("草莓正在生长中,请等待......");}@Overridepublic void harvest(){Display("草莓已到收获季,请收获......");}@Overridepublic void plant(){Display("草莓可以种植,请悉心照料.....");}private static void Display(String msg){System.out.println(msg);}
}

5工厂角色  FruitGardener

package com.simpleFactory.fruit;import com.sun.javaws.exceptions.BadFieldException;public class FruitGardener {public static Fruit factory(String fruit) throws BadFruitException{if(fruit.equalsIgnoreCase("apple"))return new Apple();else if(fruit.equalsIgnoreCase("strawberry"))return new Strawberry();else if(fruit.equalsIgnoreCase("grape"))return new Grape();elsethrow new BadFruitException("Bad fruit request");}public static void factory(String fruit,String farmwork) throws BadFieldException, BadFruitException {if(farmwork.equalsIgnoreCase("grow")) {FruitGardener.factory(fruit).grow();}else if(farmwork.equalsIgnoreCase("harvest")) {FruitGardener.factory(fruit).harvest();}else if(farmwork.equalsIgnoreCase("plant")) {FruitGardener.factory(fruit).plant();}else if(farmwork.equalsIgnoreCase("strawberry")) {FruitGardener.factory(fruit).plant();}else if(farmwork.equalsIgnoreCase("grape")) {FruitGardener.factory(fruit).plant();}elsethrow new BadFruitException("Bad fruit request");}
}

6输入异常处理  Bad FruitException

package com.simpleFactory.fruit;public class    BadFruitException extends Exception {public BadFruitException(String msg) {super(msg);}}

7客户端  Client

package com.simpleFactory.fruit;import com.sun.javaws.exceptions.BadFieldException;import java.util.Scanner;public class Client {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (true) {String msg1 = null;String msg2 = null;String msg3 = null;System.out.println("请输入水果和状态:");msg1 = scanner.next();msg2 = scanner.next();try {FruitGardener.factory(msg1, msg2);} catch (BadFruitException | BadFieldException e) {System.out.println("很抱歉,您的输入有误,请检查。");}System.out.println("是否继续?(Y/N)");msg3 = scanner.next().substring(0);if (msg3.equalsIgnoreCase("N"))System.exit(0);}}}

三、在主方法运行

完成!

总结

扩展一下

@Override这个标签有什么用呢?

1. 可以给你当作注释用,感觉这个也不能说明什么,注释也没什么用。
2. 可以告诉读你代码的人,这是对它父类方法的重写,其实很多代码规范没有为什么,规范就是规范,代码的可读性还是很重要的。
3. 编译器可以给你验证@Override下面的方法名称是否是你父类中所有的,如果没有就会报错。

简单工厂模式练习:简单工厂模式在农场系统中实现相关推荐

  1. 工厂方法模式练习:工厂方法模式在农场系统中的实现(IDEA)

    目录 前言 一.什么是工厂模式? 二.农场系统创建 1.各类概括 三.键入各类代码 1.抽象产品 角色Fruit 2.具体产品对象Apple 3. 具体产品角色Grape(后面就不一一截图了) 4.具 ...

  2. C++设计模式 | 四种创建型模式——简单工厂模式、工厂方法模式、抽象工厂模式、单例模式...

    简单工厂模式 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string> using namespa ...

  3. 设计模式——工厂模式(简单工厂/工厂/抽象)

    1. 简单工厂模式 1.1 定义 简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式. 在简单工厂模 ...

  4. python工厂模式 django_python设计模式-工厂方法模式

    题目:假设你有一个 pizza 店,功能包括下订单.做 pizza,你的代码会如何写呢? def order_pizza(): pizza = Pizza() pizza.prepare() pizz ...

  5. 工厂三兄弟之工厂方法模式

    本文转载自 :http://blog.csdn.net/lovelion/article/details/9306457 简单工厂模式虽然简单,但存在一个很严重的问题.当系统中需要引入新产品时,由于静 ...

  6. 设计模式的征途—4.抽象工厂(Abstract Factory)模式

    上一篇的工厂方法模式引入了工厂等级结构,解决了在原来简单工厂模式中工厂类职责太重的原则,但是由于工厂方法模式的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,从而增加系统开销.那么,我们应该 ...

  7. java activity模式_Activity的启动模式

    Android系统采用任务栈的方式来管理Activity实例. 栈是后进先出的数据结构.通常一个应用程序对应一个任务栈,默认情况下,每启动一个Activity都会入栈,处于栈顶位置.用户操作的永远都是 ...

  8. MS6212可替换TI PCA9306、SGM4553用于开漏模式和推拉模式的 2bit 双向电平转换器

    工采网代理的MS6212是一款双向电平转换器,开漏模式和推拉模式可以用作混合电压的数字信号系统中.其使用两个独立构架的电源供电,A端供电电压范围是1.65V到5.5V,B端供电电压范围是2.3V到5. ...

  9. JAVA 设计模式—————— 命令模式和职责链模式

    学习 Netty 前的准备工作!! 这里,还是先来复习一下 OOP (面向对象)的七大原则: 开闭原则:对扩展开放,对修改关闭 里氏替换原则:继承必须确保超类所拥有的性质在子类中仍然成立. 依赖倒置原 ...

最新文章

  1. 揭秘@爱可可:“寂寞呆子”成长记
  2. BCB写的简单的EXCEL合并
  3. 2016第51周三产品经理如何更有说服力
  4. 在滴滴和头条干了 2 年后端开发,太真实…
  5. IP通信基础 4月15日
  6. Mock和Java单元测试中的Mock框架Mockito介绍
  7. Ubuntu12.04 LTS 忘记登录密码的解决方法
  8. cad lisp 画四边形_多年经验总结CAD技巧6
  9. java is a like a_JAVA基础——is-a 、have-a、和 like-a的区别
  10. gem install 和 bundle 区别
  11. 打破硬件边界,华为EMUI分布式技术如何连接万物
  12. python 新建一列_创建一个空数据框并在python中填充创建的列
  13. 泛微OA设置系统默认水印
  14. 虚拟机镜像xp\win7\win10\win8\win2003,免安装系统,下载即用
  15. 笔记本电脑桌面的计算机图标不见了,笔记本电脑桌面图标不见了怎么办
  16. 近几年网络营销成功案例精选
  17. 对于公司的管理者,如何解决Facebook操作者离职的问题,facebook能公司统一管理吗?会不会和Facebook真实身份注册有冲突,
  18. 2021 美赛时间安排表
  19. shaper与policer
  20. 什么是MEID号如何申请MEID,A0、A1、A2以及99开头的MEID号的区别?

热门文章

  1. 不知道软件测试什么?这些是你需要知道的软件测试类型和常识
  2. 麻省理工学院计算机系正教授,我校教授应邀赴美国麻省理工学院等高校做主题演讲并访问交流...
  3. Altium Designer 21生成LOGO
  4. 【思维导图】“网络中心战”资料搜集
  5. Qt 自定义仪表盘控件
  6. 2021中国半导体阀市场现状及未来发展趋势
  7. 管理近 100 人的技术团队,不难!
  8. android frp分区,android系统的分区结构
  9. POJ 2786 Keep the Customer Satisfied 贪心
  10. fio裸盘读写及校验测试