`
文章列表

桥接模式2

24.2  解决方案 24.2.1  桥接模式来解决 用来解决上述问题的一个合理的解决方案,就是使用桥接模式。那么什么是桥接模式呢? (1)桥接模式定义   (2)应用桥接模式来解决的思路 仔细分析上面的示例,根据示例的功能 ...

桥接模式1

24.1  场景问题 24.1.1  发送提示消息 考虑这样一个实际的业务功能:发送提示消息。基本上所有带业务流程处理的系统都会有这样的功能,比如某人有新的工作了,需要发送一条消息提示他。 从业务上看,消息又分成普通消息、加急消息和特急消息多种,不同的消息类型,业务功能处理是不一样的,比如加急消息是在消息上添加加急,而特急消息除了添加特急外,还会做一条催促的记录,多久不完成会继续催促。从发送消息的手段上看,又有系统内短消息、手机短消息、邮件等等。 现在要实现这样的发送提示消息的功能,该如何实现呢? 24.1.2  不用模式的解决方案 1:实现简化版本 先考虑实现一个简单点的版本, ...

访问者模式2

25.2  解决方案 25.2.1  访问者模式来解决 用来解决上述问题的一个合理的解决方案,就是使用访问者模式。那么什么是访问者模式呢? (1)访问者模式定义 (2)应用访问者模式来解决的思路 仔细分析上面的示例,对于客 ...

访问者模式1

25.1  场景问题 25.1.1  扩展客户管理的功能        考虑这样一个应用:扩展客户管理的功能。        既然是扩展功能,那么肯定是已经存在一定的功能了,先看看已有的功能:公司的客户分成两大类,一类是企业客户,一类是个人客户,现有的功能非常简单,就是能让客户提出服务申请。目前的程序结构如图25.1所示:   图25.1  已有的客户管理程序结构示意图 现有的实现很简单,先看看Customer的实现,示例代码如下: /**  * 各种客户的父类  */ public
继续研磨设计模式,来个简单的   简单工厂         简单工厂不是一个标准的设计模式,但是它实在是太常用了,简单而又神奇,所以还是需要好好掌握的,就当是对学习设计模式的热身运动吧。        为了保持一致 ...
                     最近上班轻松,看看设计模式啥的,看到桥接模式,有些心得,写下来以便以后回忆回忆。     桥接模式的好处就不多说了,无非就是实现和抽象分离,各自变化等。   进入主题吧: 个人理解桥接模式: 比如蜡笔,和毛笔这两个东西,如果用蜡笔画画,我们知道蜡笔的颜色和蜡笔本身是偶会在一起的,不像毛笔,毛笔本身是没有颜色的,如果我要画画,需要12种颜色,型号有大中小,那么就需要36支蜡笔,而反观毛笔,我只需要12种颜料,然后大中小三种毛笔类型,如果我们用面向对象思想来设计,那么蜡笔需要36个类,而毛笔只需要15个类。为什么会出现这种情况呢?   ...
  前言:   做一个移动应用的后台服务器,涉及到多数据库,以及数据库集群配置:数据源用spring管理,中间封装了自己的jdbc   看配置文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> ...

log4j 项目中使用

    博客分类:
  • java
 前言:log4j 的基本配置就介绍了,在这里只讲实际中使用.根据配置文件解释问题   1.使用配置文件log4j.xml 配置日志信息:   log4j.xml   <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"><log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"  ...
前言:最近在复习数据结构,又偶遇kmp,居然没感觉了,理不出思路,特别是对next[]函数的求解更没感觉,于是静下心花了2天时间,细细重新理解了一遍,这篇文章仅当自己在学习kmp过程中的一点感悟,或许不一定理解的完全透彻,只是在记录我学习过程中思维的灵感,以便今后回来感受。好了废话不多说了,直接进入正题。   1.什么是kmp?    它是一种字符串匹配算法。与以往字符串匹配算法的区很简单就是,kmp算法中主串的i值不回溯,子串的j值每次回溯不一定从0开始,它每次回溯值j = next[j].看下面的图就能一清二楚了。              有了这个两个图:就很容易理解kmp ...
最近温习多线程通信,所以用多线程简单模拟了交通灯,感觉自己对线程方面的东西又有了进一步的理解。 通过这个模拟明白了notify(),与wait()又一些特点。 下面将代码贴上: 交通灯类: package com.xxg.entiry; public class Light { public int num = 20;// 南北方向和东西方向总计时间为20秒 public String color; public Light(String color){ this.color = color; } public synch ...
     在同步方法中,线程间的通信主要依靠wait(),notify(),notifyAall(),来实现。    这三个方法必须在synconized 代码块中使用。 下面这段话引用网上: 引用  wait()方法使当前线程暂停执行并释放对象锁标志,让其他线程可以进入Synchronized数据块,当前线程被放入对象等待池中。当调用 notify()方法后,将从对象的等待池中移走一个任意的线程并放到锁标志等待池中,只有锁标志等待池中的线程能够获取锁标志;如果锁标志等待池中没有线程,则notify()不起作用。    notifyAll()则从对象等待池中移走所有等待那个对象的线程并 ...
要想很好的理解synchronized 必须理解好什么是对象锁。 关于对象锁的理解:    刚开始真的有点难理解这个对象锁的概念,在网上搜了一大堆,感觉还是不怎么清晰。今天在次理解了下对象锁,突然发现这个对象锁并不难理解,关键是你要明白这个对象指的是什么? [size=medium]其实这个对象指的是拥有synchronized修饰的函数,或者是代码块的一个类的实例。 当某个线程访问该类的方法或synchronized修饰的代码快时,就获得该对象的锁,其他线程就无法获得该对象的锁,也就是说这个对象已经被前一个线程所占用,另外的线程无法得到该对象,所以该对象对应的方法也就无法访问,必须等到前一 ...

java线程同步<二>

    博客分类:
  • java
  为了解决 线程安全问题,也就是多个线程访问同一个实例变量,而引入了同步的概念。 不加同步的代码块: package com.xxg.reflect; public class Test3 { public static void main(String[] args) { CSD cs = new CSD(); Thread th1 = new Thread ...

java线程安全<一>

    博客分类:
  • java
  java线程安全分主要分2快   1.实例变量且为单例模式为非线程安全,实例变量不为单例则线程安全 2.局部变量线程安全。 实例变量线程模拟 public class Test1 { public static void main(String[] args) { B b = new B(); Thread th1 = ...
  spring 依赖注入: 关于ioc依赖注入方式,解决了在java程序中使用new 方式来产生对象,实现了解耦。 下面将结合代码 实现类对应属性与配置文件的映射,对于list,map,等属性映射做了测试。 下面bean 代码只下了属性,构造函数以及set,get 方法省略 public class StudentBean { private int id; private String name; private BoxBean box; // 对象类型映射 public int getId() { return id; } public void ...
Global site tag (gtag.js) - Google Analytics