- 浏览: 194391 次
- 性别:
- 来自: 北京
最新评论
-
only_java:
博主,你好。感谢这篇你的这篇文章,我的问题是跟你一样,也是在跑 ...
JVM Crash分析 -
shuofenglxy:
1 确保程序运行时没有更新程序需要的相关jar包。2 确保程序 ...
JVM Crash分析 -
renduly:
# A fatal error has been detect ...
JVM Crash分析 -
shuofenglxy:
renduly 写道博主好。这两天我在公司程序也出现了类似的问 ...
JVM Crash分析 -
renduly:
博主好。这两天我在公司程序也出现了类似的问题。博主能否说的详细 ...
JVM Crash分析
文章列表
解释器模式是一种行为模式。主要方法就是形成一个解释语法树,然后根据语法树中的语法规则执行每一个语法字句即可。
解释器模式类图:
说明:这个类图只是demo的类图示例,真正的解释器还包括测试类中的语法树,然后根据不同的解释器去对context内容进行解释执行。
具体代码示例:
解释器接口:
package interpreterPattern;
public interface Interpreter {
void interpret(Context context);
}
加法器
packag ...
命令模式是一种行为模式,解耦了发送方与接收方。它将请求封装成一个对象,使得可以用不同的请求使得客户端参数化,典型应用在支持redo undo 事物等场景。
命令模式类图:
...
职责链模式是保证一个事件一定能够被处理的一种模式。比如:一个coder去请假,temLeader批5天一下的,Manager批10天的,就这么简单。职责链模式是一种行为模式。
职责链模式类图:
说明:
Coder发出Something请求,经过TeamLeader->Manager构成的链,如果TeamLeader能处理,就返回结果,不能则有Manager处理。变化之处在于,当TeamLeader不在时(也可以是因为某种原因这里down掉了),则由链中其他环节去处理了,这样就保证了请求一定能被处理,增强了系统的健壮性。
具体代码:
...
java中的动态代理都需要实现一个实现了InvocationHandler接口的代理类,在该类中需要实现invoke方法,并且需要注入你想要代理的目标类对象实例。然后就可以对想要代理的方法进行操作了。
动态代理类图:
...
代理模式貌似是java中用途最广的设计模式之一,也是最重要的设计模式之一。使用代理模式能够封装设计细节,甚至能够改变被代理对象的行为,也可以在被代理对象开始行为之前做一些前期的处理【权限认证,开启事务等等就可以在这个地方做】。我们先看看前面两种代理方式:兄弟代理和父子代理。代理模式也是一种结构型模式。
代理模式类图:
具体demo:
兄弟代理是指被代理对象实现了某一接口,那么可以用代理去实现这一接口,从而能够代替被代理对象完成接口行为。
Person接口:
package proxyPattern;
public interface Per ...
外观模式,一种封装底层实现的模式。使得调用者不用关心谁去具体的完成功能操作,解耦了请求者与操作者,封装了细节。外观模式也是一种结构型设计模式。
外观模式类图:
具体demo:
Facade接口:
package facadePattern;
public interface Facade {
void doA();
void doB();
}
具体实现:
package facadePattern;
public class FacadeImpl implements Facade{
...
装饰模式是对对象功能的扩展的一种模式,好处在于不更改原有对象的特性,只是通过注入方式为对象添加一些额外的功能,使得对象的功能丰富,特别有利于对对象行为的多个细小行为的添加。装饰模式是一种结构型模式。
装饰模式类图:
具体demo示例:
//组件抽象类
package decoratorPattern;
public abstract class Component {
public abstract void doSomething();
}
具体实现:
package decorator ...
组合模式,顾名思义,采用了组合的方式,使得简单的对象可以组合成复杂的对象,同时保证了简单对象和复杂对象使用上的一致性。这是一种典型的has- a 关系。用过组合 使得简单对象成为了复杂对象的一部分,而在使用上,简单对象和复杂对象又是一致的。
组合模式类图:
具体实例demo:
抽象对象:
package compositePattern;
import java.util.ArrayList;
import java.util.List;
public abstract class Person {
protected Lis ...
桥接模式将抽象部分与具体实现分离,使得都能独立的变化。它采用注入实现的方式来实现解耦的,而通常注入的行为只是被注入者行为的一部分。桥接模式也是一种结构型设计模式。
桥接模式类图:
具体示例demo:
抽象消息
package bridgePattern;
public abstract class AbstractMessage {
private MessageSending messageSending;
private String msgContent;
private String toUserName;
public Ab ...
适配器模式,正如适配器这个名字一样,起一个转换的作用。目的是通过接口转化,使得新系统和老系统可以正常交互。适配器模式是一种结构型模式。
适配器模式类图:
具体实现demo:
新系统:
package adapterPattern;
public interface NewSystem {
public void doAnotherthing(String input);
}
实现:
package adapterPattern;
public class NewSystemImpl implements NewSyste ...
建造者模式是设计模式中另一个重要的创建对象的方法模式。它的特点主要是稳定了创建的过程,比如下面的例子中就是每个产品的创建过程都包括创建A部分和创建B部分,但不同的builder可以有自己的方式去创建产品,比如不同的房地产商可以建不同的房子【大房子、小房子】,只要建造过程稳定一致就可以了。
建造者模式类图:
建造者接口:
package builderPattern;
public interface Builder {
Product getProduct();
Object buildProductPartA();
Objec ...
原型模式比较简单,就是利用object中的clone()方法做一次深度拷贝,复制一份原有对象即可。这种方式的好处在于原有对象的拷贝没有调用原有对象的New方法,也就没有触发原有对象的构造函数链,提高了对象制造效率。这种模式应用场景在于对象基本相同,除了个别属性字段有区分,可以复制后更改这些个别字段即可。
原型模式类图:
具体实现demo:
原型类:
package protypePattern;
public class ProtoType implements Cloneable{
private Str ...
抽象工厂方法模式是用途最广的方法模式之一,其主要思想是利用工厂生产组合的复杂实例组,由于工厂、不同的实例组中实例一般都抽象为接口层次,所以很方便添加不同的具体工厂和不同的实例组。主要用于创建一系列相关的对象组或是其他方面。
抽象工厂方法模式类图:
具体实例demo:
建造工厂:
package abstractFactory;
public interface CreatorFactory {
Food getFoodInstance();
Fruit getFruitInstance();
}
具体工厂1:
package a ...
工厂方法模式也是一种创建对象的设计模式,属于创建型设计模式。工厂方法模式定义了对象工厂接口,抽象出了获取对象实例方法,而将具体的创建对象工作放到了具体的类创建工厂进行。
工厂方法模式类图:
具体实现代码示例:
工厂接口:
package factoryPattern;
public interface Factory {
Fruit factorygetInstance();
}
具体工厂1:
package factoryPattern;
public class AppleFactory implements Factory{ ...
简单工厂模式又叫静态工厂模式,是一种创建对象实例的设计模式。通过对象创建工厂根据不同的创建请求创建不同的类对象。将不同对象的创建工作集中到一个创建工厂来完成。
简单工厂模式类图:
...