- 浏览: 65755 次
- 性别:
- 来自: 成都
文章列表
以前一直都用Comparable接口来排序直到最近才只知道还有Comparator接口。
2个接口的区别在于一个是在类的内部实现,另外一个是通过外部类来实现
简单通过代码来写下区别
1、Comparator 模式
A、被比较的类
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
...
命令模式:将命令对象封装起来,现实请求对象与接收对象的彻底分离。
一般命令模式涉及到的几个对象
1、接收对象Receiver
public class Receiver {
private int money;
public void action(int newMoney) {
this.money = newMoney;
System.out.println("It has " + money);
}
public int getMoney() {
return money;
}
}
接收对象是一个有状 ...
职责链模式
很形象的一个模式,就好比请假一样,如果自己不能审批就要交给上级。所以这个行为模式很好理解
实现如下:
1、责任链抽象类
public abstract class Handler {
protected Handler handler;
public void setSuccessor(Handler handler) {
this.handler = handler;
}
public abstract void handleRequest(int day);
}
2、第1级
public class Leader exten ...
代理模式 通过代理类来添加新的功能
1、代理接口
public class Student implements Person {
@Override
public void talk() {
System.out.println("talking");
}
}
2、被代理类A
public interface Person {
void talk();
}
3、代理类B
public class Lawyer implements Person {
private Person person;
@Over ...
享元模式
享元模式简单的来说就是一种为了避免在我们的系统中产生大量重复对象的方法。它缓存生成后的对象,让后面的使用者不会生成重复的对象。实践中很少使用,实践中都是失去其他的缓存手段。
1、要缓存的类
public class LoveBook {
private final String index;
public LoveBook(String index) {
this.index = index;
}
}
2、工厂
这个工厂能够根据不同的KEY来生成对象并且缓存起来
public class BookFactory {
private fi ...
外观模式是一种很好理解的方式。设计一个Facade类,由它来直接与调用方打交道。这样可以对调用方与实现方进行解耦。
具体代码
1、Facade类
public class MoveFacade {
public void onTrain() {
new Bus().take();
new Car().drive();
}
public void gohome() {
new Bus().move();
}
}
2、实现方A
public class Car {
public void drive() {
System.o ...
装饰模式 就是给一个类添加其他的功能。这个模式跟代理模式相当的相识。
看代码
1、基础接口
public interface Phone {
public void call();
}
2、要装饰的类
@Override
public void call() {
System.out.println("It's only call");
}
3、装饰类
public abstract class MobileTelephone {
private final Phone phone;
public Mobile ...
合成(Composite)模式有时又叫做部分-整体(Part-Whole)模式。
合成模式将叶子对象合成到树的结构中,可以用来描述整体与部分的关系。
这样可以任意的添加叶子节点。
1、模式涉及到的三个角色
1)抽象构件(Component):这是一个抽象(也可以使抽象类)角色,它给所有参加合成的对象规定抽象方法
2)叶子构件(Leaf):参加合成的树叶对象。一个树叶没有下级的子对象。定义出参加具体方法的实现。
3)树枝构件(Composite)角色:管理所有叶子的实现类。他本来也是抽象结构的子类。
合成模式可以看成一棵树,抽象构件就是主干,树枝构件就是树枝,他对叶子进行管理。
具体实现
...
使用JAXB 转化bean(支持map对象)
- 博客分类:
- xml相关
jaxb可以使用XmlAdapter来定义复杂对象。
Map是我们经常用的对象所以下面演示下怎么使用
1、beans里面包含一个map对象,bean对象不发生变化
@XmlRootElement(name = "beans", namespace = "http://www.example.org/studyframework_0.1")
@XmlAccessorType(XmlAccessType.NONE)
public class Beans {
@XmlElement(name = "bean")
@XmlJ ...
java可以轻松的将xml文件转化为bean对象
这里介绍一个强大的工具jaxb,其实jdk就有这个功能,但是感觉不怎么强大,而且jaxb还可以根据xsd结构来生成对象。有空会介绍
1、javabean对象
@XmlRootElement(name = "beans")
@XmlAccessorType(XmlAccessType.NONE)
public class Beans {
@XmlElement(name = "bean")
private List<Bean> beanList;
public List ...
一直以来都觉得写框架是一个很困难的事情,但是随着经验的增加也开始研究了一些主流的webmvc框架,现在依样画瓢来完成一个最简单的框架。
既然是web框架servlet是必不可少的
一般的主流web框架加载配置不外乎xml配置filter或者listener当然或许也有用servlet的。。
我们先看下用listener filter 以及servlet的配置
首先我用一个servlet 2.5的api
<filter>
<filter-name>testFilter2</filter-name>
<filter-class ...
访问者模式
这个模式网上有很多文章其实很多的文章都容易让人混乱。尤其是在被访问者上添加对象,更有甚者是添加ObjectStructure
首先我说明下我对访问模式的理解
看代码会很容易理解
1、访问者接口
public interface Visitor {
void visit(Home myhome);
}
很简单的方法 只提供一个访问Home的方法
2、访问者接口A的实现
public class BeijingVisitor implements Visitor{
@Override
public void visit(Home myhome) {
...
这章说下适配器模式
这个模式很好理解简单的来说将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
还是用例子说明
A相机只能用SD卡,但是我手上只有TF卡,怎么才能使相机工作呢?这时候我就去买个一个卡套(当然更多的同学是直接买个SD卡。。。)
卡套就相当于一个适配器
代码如下
1、SD卡
public class SdCard {
public void big() {
System.out.println("this is big");
}
}
2、TF卡
public class ...
color=red]1、在switch语句中可以使用字符串类型[/color]
请看下例
public class SwitchSamlpe {
public static void main(String[] args){
SwitchSamlpe.show("man");
SwitchSamlpe.show("\u006d\u0061\u006e");
}
public static void show(String gender){
switch(gender){
case "man&qu ...
桥梁模式跟上一章介绍的策略模式比较相似
最大的区别就是原始类是一个抽象类,我们可以这样理解桥梁模式主要是把行为与属性分离。而策略模式只是一个简单的行为模式。所以通过以下的例子可以很好的看出差异:
1、原始类A
public abstract class Human {
private WorkBehavior workBehavior;
protected abstract void appearance();
public void work(){
workBehavior.work();
}
public void s ...