深入浅出UML:http://blog.csdn.net/lovelion/article/details/7843437

//Component

 1 package umltest.ticketmachine;
2
3 /**
4 * Created by on 16/10/28.
5 */
6 // 所有部件类的父类:所有部件均可实现自检并恢复到初始状态
7 public abstract class Component {
8
9 String message;
10
11 abstract void init();
12
13 abstract void doSelfTest();
14
15 public Component(String message) {
16 this.message = message;
17 }
18
19 public Component() {
20 }
21 }

//Keyboard

1 package umltest.ticketmachine;
2
3 /**
4 * Created by on 16/10/28.
5 */
6 // 键盘抽象类
7 public abstract class Keyboard extends Component{
8 abstract int getSelectedKey();
9 }

//ActionKeyboard

 1 package umltest.ticketmachine;
2
3 /**
4 * Created by on 16/10/28.
5 */
6 // 继续、取消键盘类
7 public class ActionKeyboard extends Keyboard {
8
9 int inputKey;
10
11 public ActionKeyboard(int inputKey) {
12 this.inputKey = inputKey;
13 }
14
15 @Override
16 int getSelectedKey() {
17 return inputKey;
18 }
19
20 @Override
21 void init() {
22
23 }
24
25 @Override
26 void doSelfTest() {
27
28 }
29
30 // 继续/取消键盘事件处理
31 void getAction() {
32
33 }
34
35 }

// TicketKindKeyboard

 1 package umltest.ticketmachine;
2
3 /**
4 * Created by on 16/10/28.
5 */
6 // 车票种类键盘类
7 public class TicketKindKeyboard extends Keyboard{
8 int inputKey;
9
10 public TicketKindKeyboard(int inputKey) {
11 this.inputKey = inputKey;
12 }
13
14 public TicketKindKeyboard() {
15 }
16
17
18 @Override
19 int getSelectedKey() {
20 return 0;
21 }
22
23 @Override
24 void init() {
25
26 }
27
28 @Override
29 void doSelfTest() {
30
31 }
32
33 // 车票种类键盘事件处理
34 String getTicketKind() {
35 // TODO
36 return String.valueOf(inputKey);
37 }
38 }

// DestinationKeyboard

 1 package umltest.ticketmachine;
2
3 /**
4 * Created by on 16/10/28.
5 */
6 // 目的地键盘类
7 public class DestinationKeyboard extends Keyboard {
8
9 int inputKey;
10
11 public DestinationKeyboard(int inputKey) {
12 this.inputKey = inputKey;
13 }
14
15 public DestinationKeyboard() {
16 }
17
18 @Override
19 int getSelectedKey() {
20 return inputKey;
21 }
22
23 @Override
24 void init() {
25 inputKey = 0;
26 }
27
28 @Override
29 void doSelfTest() {
30
31 }
32
33 // 目的地键盘事件处理
34 String getDestinationCode() {
35 return DestinationEnum.getCodeByKey(String.valueOf(getSelectedKey()));
36 }
37 }

// DestinationEnum

 1 package umltest.ticketmachine;
2
3 import java.util.Map;
4
5 /**
6 * Created by on 16/10/28.
7 */
8 public enum DestinationEnum {
9
10 LISHUI("578", "0578"),
11 WENZHOU("577", "0577"),
12 NINGBO("574", "0574");
13
14
15 private String key;
16 private String code;
17
18 DestinationEnum(String key, String code) {
19 this.key = key;
20 this.code = code;
21 }
22
23 DestinationEnum() {
24 }
25
26 public String getKey() {
27 return key;
28 }
29
30 public void setKey(String key) {
31 this.key = key;
32 }
33
34 public String getCode() {
35 return code;
36 }
37
38 public void setCode(String code) {
39 this.code = code;
40 }
41
42 // 不考虑判空校验
43 public static String getCodeByKey(String key) {
44 for (DestinationEnum destinationEnum : DestinationEnum.values()) {
45 if (destinationEnum.getKey().equalsIgnoreCase(key)) {
46 return destinationEnum.getCode();
47 }
48 }
49 return null;
50 }
51
52 public static void main(String[] args) {
53
54 System.out.println(MockDb.priceMap);
55
56 }
57 }

// MockDb

 1 package umltest.ticketmachine;
2
3 import java.util.HashMap;
4 import java.util.Map;
5
6 /**
7 * Created by on 16/11/1.
8 * 定义票价:目的地以及坐席等级,比如目的地是0578,1等座则票价159
9 */
10 public class MockDb {
11 public static Map<String, Map<String, Integer>> priceMap = new HashMap<>();
12
13 static {
14 Map<String, Integer> map1 = new HashMap<>();
15 map1.put("1", 159);
16 map1.put("2", 117);
17 priceMap.put("0578", map1);
18
19 Map<String, Integer> map2 = new HashMap<>();
20 map2.put("1", 72);
21 map2.put("2", 50);
22 priceMap.put("0577", map2);
23
24 Map<String, Integer> map3 = new HashMap<>();
25 map3.put("1", 232);
26 map3.put("2", 158);
27 priceMap.put("0574", map3);
28
29 }
30 }

// Screen  如何通过AOP在不同的处理阶段,显示不同的信息。传递参数?

 1 package umltest.ticketmachine;
2
3 /**
4 * Created by on 16/10/28.
5 */
6 // 显示屏类
7 public class Screen extends Component {
8 @Override
9 void init() {
10
11 }
12
13 @Override
14 void doSelfTest() {
15
16 }
17
18 public Screen(String message) {
19 super(message);
20 }
21
22 public Screen() {
23 }
24
25 // 显示信息
26 public void showTextBefore() {
27 // TODO
28 System.out.println("之前");
29 }
30
31
32 // 显示信息
33 public void showTextAfter() {
34 // TODO
35 System.out.println("之后");
36 }
37 }

//Money

1 package umltest.ticketmachine;
2
3 /**
4 * Created by on 16/11/1.
5 */
6 public interface Money {
7 int getMoney();
8 }

// CardDriver

 1 package umltest.ticketmachine;
2
3 /**
4 * Created by on 16/10/28.
5 */
6 // 卡驱动器类
7 public class CardDriver extends Component implements Money{
8 @Override
9 void init() {
10
11 }
12
13 @Override
14 void doSelfTest() {
15
16 }
17
18
19 // 获取卡金额
20 String getCredit() {
21 // TODO
22 return null;
23 }
24
25
26
27 // 更新卡余额
28 double debitFare() {
29 // TODO
30 return 0;
31 }
32
33 // 吐卡
34 void ejectMCard() {
35
36 }
37
38 @Override
39 public int getMoney() {
40 return 0;
41 }
42 }

// CashSlot

 1 package umltest.ticketmachine;
2
3 /**
4 * Created by on 16/10/28.
5 */
6 // 现金(硬币/纸币)槽类
7 public class CashSlot extends Component implements Money{
8
9 int money;
10
11 public CashSlot(int money) {
12 this.money = money;
13 }
14
15 public CashSlot() {
16 }
17
18 @Override
19 void init() {
20
21 }
22
23 @Override
24 void doSelfTest() {
25
26 }
27
28 // 获取金额
29 void getCredit() {
30
31 }
32
33 @Override
34 public int getMoney() {
35 return money;
36 }
37 }

// Printer

 1 package umltest.ticketmachine;
2
3 /**
4 * Created by on 16/10/28.
5 */
6 public class Printer extends Component {
7 @Override
8 void init() {
9
10 }
11
12 @Override
13 void doSelfTest() {
14
15 }
16
17 public Printer(String message) {
18 super(message);
19 }
20
21 public Printer() {
22 }
23
24 // 打印车票
25 void printTicket() {
26 System.out.println("正在打印车票...");
27 }
28
29 //出票
30 void ejectTicket() {
31 System.out.println("出票中,请稍等");
32 }
33
34 }

// TicketSoldSystem

 1 package umltest.ticketmachine;
2
3 import java.util.Map;
4
5 /**
6 * Created by on 16/10/28.
7 */
8 // 售票系统类
9 public class TicketSoldSystem {
10
11 // 目的地
12 DestinationKeyboard destinationKeyboard;
13 // 座位类别:一等座、二等座等
14 TicketKindKeyboard ticketKindKeyboard;
15 // 增加票数 或者 取消
16 ActionKeyboard actionKeyboard;
17
18 // 钱
19 Money money;
20
21 // 打印 局部变量
22 // Printer printer;
23
24
25 // 屏幕信息,通过AOP在每一个操作前后显示
26 // Screen screen;
27
28
29 public TicketSoldSystem(DestinationKeyboard destinationKeyboard, TicketKindKeyboard ticketKindKeyboard,
30 ActionKeyboard actionKeyboard, Money money) {
31 this.destinationKeyboard = destinationKeyboard;
32 this.ticketKindKeyboard = ticketKindKeyboard;
33 this.actionKeyboard = actionKeyboard;
34 this.money = money;
35 }
36
37 // 验证金额
38 boolean verifyCredit() {
39 Map<String, Map<String, Integer>> priceMap = MockDb.priceMap;
40 int singlePrice = priceMap.get(destinationKeyboard.getDestinationCode()).get(ticketKindKeyboard.getTicketKind());
41 int totalPrice = singlePrice * actionKeyboard.getSelectedKey();
42
43
44 if (totalPrice == money.getMoney()) {
45 return true;
46 } else {
47 return false;
48 }
49 }
50
51 // 计算费用
52 void calculateFare() {
53 // 验证金额
54 if (verifyCredit()) {
55 // 打印车票
56 Printer printer = new Printer();
57 printer.printTicket();
58 printer.ejectTicket();
59 }
60
61 }
62
63 public static void main(String[] args) {
64
65 }
66 }

// MainStart

 1 package umltest.ticketmachine;
2
3 import org.springframework.context.support.ClassPathXmlApplicationContext;
4
5 /**
6 * Created by on 16/11/1.
7 */
8 public class MainStart {
9 public static void main(String[] args) {
10 // 从应用的classpath目录载入Spring配置文件
11 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean/ticketsystem.xml");
12 TicketSoldSystem ticketSoldSystem = context.getBean(TicketSoldSystem.class);
13
14 ticketSoldSystem.calculateFare();
15 }
16 }

// ticketsystem.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
4 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
5
6 <bean id="destinationKeyboard" class="umltest.ticketmachine.DestinationKeyboard">
7 <constructor-arg value="578"/>
8 </bean>
9
10 <bean id="ticketKindKeyboard" class="umltest.ticketmachine.TicketKindKeyboard">
11 <constructor-arg value="1"/>
12 </bean>
13
14 <bean id="actionKeyboard" class="umltest.ticketmachine.ActionKeyboard">
15 <constructor-arg value="2"/>
16 </bean>
17
18 <bean id="money" class="umltest.ticketmachine.CashSlot">
19 <constructor-arg value="318"/>
20 </bean>
21
22 <bean id="ticketSoldSystem" class="umltest.ticketmachine.TicketSoldSystem">
23 <constructor-arg name="destinationKeyboard" ref="destinationKeyboard" />
24 <constructor-arg name="ticketKindKeyboard" ref="ticketKindKeyboard" />
25 <constructor-arg name="actionKeyboard" ref="actionKeyboard" />
26 <constructor-arg name="money" ref="money" />
27 </bean>
28
29
30 <bean id="screen" class="umltest.ticketmachine.Screen">
31 <constructor-arg value="318"/>
32 </bean>
33
34 <aop:config>
35 <aop:aspect ref="screen">
36 <aop:pointcut id="ticketmach" expression="execution(* umltest.ticketmachine.*.*(..)))"/>
37 <aop:before method="showTextBefore" pointcut-ref="ticketmach" />
38 <aop:after method="showTextAfter" pointcut-ref="ticketmach" />
39 </aop:aspect>
40 </aop:config>
41
42
43 </beans>

Spring及UML的更多相关文章

  1. spring源码:学习线索(li)

    一.spring xml配置(不包括AOP,主要了解在初始化及实例化过程中spring配置文件中每项内容的具体实现过程,从根本上掌握spring) <bean>的名字 &,alia ...

  2. 浅谈对Spring Framework的认识

    Spring Framework,作为一个应用框架,官方的介绍如下: The Spring Framework provides a comprehensive programming and con ...

  3. Spring 000 框架简介 (转载)

    转载自:https://my.oschina.net/myriads/blog/37922 1.使用框架的意义与Spring的主要内容 随着软件结构的日益庞大,软件模块化趋势出现,软件开发也需要多人合 ...

  4. Spring任务调度器之Task的使用

    Spring Task提供两种方式进行配置,正如大家所想吧,还是一种是annotation(标注),而另外一种就是XML配置了.但其实这里我觉得比较尴尬,因为任务调度这样的需求,通常改动都是比较多的, ...

  5. spring源码分析(一)IoC、DI

    创建日期:2016.08.06 修改日期:2016.08.07 - 2016.08.12 交流QQ:992591601 参考书籍:<spring源码深度解析>.<spring技术内幕 ...

  6. 【Spring】Spring AOP实现原理

    Spring AOP实现原理 在之前的一文中介绍过Spring AOP的功能使用,但是没有深究AOP的实现原理,今天正好看到几篇好文,于是就自己整理了一下AOP实现的几种方式,同时把代理模式相关知识也 ...

  7. spring入门(二)【加载properties文件】

    在开发过程当中需要用到配置信息,这些信息不能进行硬编码,这时配置文件是一个比较好的方式,java提供了properties格式的文件,以键值对的方式保存信息,在读取的时候通过键获得键对应的值,spri ...

  8. 形象化的spring 依赖注入原理

      转. IoC就是Inversion of Control,控制反转.在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不是在你的类内部控制.这称为控制反转. 下面我们以几个例子来说明什 ...

  9. 设计模式——Spring IoC中用到的模板方法模式

    基本概念 什么是模板方法(Template method):父类定义了骨架(调用哪些方法及顺序),某些特定方法由子类实现. 最大的好处:代码复用,减少重复代码.除了子类要实现的特定方法,其他方法及方法 ...

  10. spring源码学习之路---AOP初探(六)

    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 最近工作很忙,但当初打算学习 ...

随机推荐

  1. windows下安装及配置JDK(详解版)

    1.下载JDK 本文以JDK1.8为主 JDK1.8官方下载链接 https://www.oracle.com/java/technologies/javase/javase-jdk8-downloa ...

  2. 【VS Code 与 Qt6】QAction 类的一些事

    QAction 类表示用户命令的一种抽象,包括命令文本.图标.命令触发后要执行的代码.菜单.工具栏按钮往往存在相同的功能,将这些命令独立抽出来,放到 QAction 以象上,可避免编写重复的代码.比如 ...

  3. Android Studio开发小项目

    "莆仙小馆"--莆田文化展示APP 文化展示程序目的在于应用科学技术助推家乡优秀传统文化的展示与交流.通过图片.视频.音频等展示方式向用户立体地展示一个文化城邦.传统文化与科学技术 ...

  4. java使用apache.poi导出word文件

    功能说明: 将试卷导出word,并可以打印,装订,效果图: 下面是实现代码: package com.xxxxx.business.course.utils; import com.alibaba.f ...

  5. 在不修改代码情况下解决 Chrome 浏览器跨域

    前言: 在前后台分离的项目,跨域是经常遇到的问题了.是实际解决方案中,大部分采用服务端配置,而如果只是调试,可以通过配置 Chrome 浏览器实现跨域,以下以 NodeJs 服务为例. 开始: 1. ...

  6. 聊聊 RocketMQ 名字服务

    NameServer 是专为 RocketMQ 设计的轻量级名字服务,它的源码非常精简,八个类 ,少于1000行代码. 这篇文章, 笔者会从基础概念.Broker发送心跳包.NameServer 维护 ...

  7. [selenium]相对定位器

    前言 Relative Locators,相对定位器,是Selenium 4引入的一个新的定位器,相对定位器根据源点元素去定位相对位置的其它元素. 相对定位方法其实是基于JavaScript的 get ...

  8. 【Nacos篇】Nacos基本操作及配置

    官方文档:https://nacos.io/zh-cn/docs/v2/ecology/use-nacos-with-spring-cloud.html 前置条件:SpringCloud脚手架 单机模 ...

  9. JavaScript的Map和WeakMap

    熟悉JavaScript的Map和WeakMap Map Map的键/值可以是任何类型 基本API 初始化映射: //使用new关键字和Map构造函数进行初始化 const m1 = new Map( ...

  10. stencilJs学习之构建 Drawer 组件

    前言 在之前的学习中,我们已经掌握了 stencilJs 中的一些核心概念和基础知识,如装饰器 Prop.State.Event.Listen.Method.Component 以及生命周期方法.这些 ...