1. 责任链模式【本身处理不了的往下传递处理】
- 为请求创建一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。在这种模式中,每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。
【本身处理不了的往下传递处理】
- 责任链模式的实现流程
public abstract class AbstractLogger{
protected int level;
protected AvstractLogger nextLogger;
}
public class ConsoleLogger extends AbstractLogger {}
public class ErrorLogger extends AbstractLogger {}
public class FileLogger extends AbstractLogger {}
2. 命令模式【打包模式】
- 请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
【打包模式】
- 命令模式实现流程
public interface Order{
void executer();
}
public class Stock{}
public class BuyStock implements Order{}
public class SellStock implements Order{}
public class Broker{
private List<Order> orderList = new ArrayList<Order>();
}
3. 解释器模式【依据规则解析】
- 提供了评估语言的语法或表达式的方式。
【依据规则解析】
- 解释器模式的实现流程
public interface Expression{}
public class TerminalExpression implements Expression{}
public class OrEcpression implements Expression{}
public class AndExpression implements Expression{}
4. 迭代器模式【java中的迭代器原理】
- 用于顺序访问集合对象的元素,不需要指导集合对象的底层表示
【java中的迭代器原理】
- 迭代器模式的实现流程
public interface Iterator {
public boolean hasNext();
public Object next();
}
public interface Container {
public Iterator getIterator();
}
public class NameRepository implements Container {
public String[] names = {"Robert" , "John" ,"Julie" , "Lora"};
@Override
public Iterator getIterator() {
return new NameIterator();
}
private class NameIterator implements Iterator {
int index;
@Override
public boolean hasNext() {
if(index < names.length){
return true;
}
return false;
}
@Override
public Object next() {
if(this.hasNext()){
return names[index++];
}
return null;
}
}
}
public class IteratorPatternDemo {
public static void main(String[] args) {
NameRepository namesRepository = new NameRepository();
for(Iterator iter = namesRepository.getIterator(); iter.hasNext();){
String name = (String)iter.next();
System.out.println("Name : " + name);
}
}
}
5. 中介者模式【通信交流】
- 用来降低多个对象和类之间的通信复杂性。
【通信交流】
- 中介者模式的实现流程
public static void class ChatRoom{}
public class User{
public void sendMessage(String message){
ChatRoom.showMessage(this, message);
}
}
6.备忘录模式【保存模式】
- 保存一个对象的某个状态,以便在适当的时候恢复对象。
【保存模式】
- 备忘录模式的实现流程
public class Memento{}
public class Originator{}
public class CareTaker{
private List<Memento> mementoList = new ArrayList<Memento>();
public void add(Memento state){
mementoList.add(state);
}
public Memento get(int index){
return mementoList.get(index);
}
}
7. 观察者模式【一对多】
- 当对象间存在一对多关系时,则使用观察者模式。
【一对多】
- 观察者模式的实现流程
public class Subject{
private List<Observer> observers = new ArrayList<Observer>();
}
public abstract class Observer{
protected Subject subject;
public abstract void update();
}
public class BinaryObserver extends Observer{}
public class OctalObserver extends Observer{}
public class HexaObserver extends Observer{}
Subject subject = new Subject();
new HexaObserver(subject);
new OctalObserver(subject);
new BinaryObserver(subject);
subject.setState(15);
subject.setState(10);
8. 状态模式【A变B跟着变】
- 类的行为是基于它的状态改变的。
【A变B跟着变】
- 状态模式的实现流程
public interface State {
public void doAction(Context context);
}
public class StartState implements State{
public void doAction(Context context){
context.setState(this);
}
}
public class StopState implements State {
public void doAction(Context context) {
context.setState(this);
}
}
public class Context{
private State state;
public Context(){
state = null;
}
public void setState(State state){
this.state = state;
}
public State getState(){
return state;
}
}
9. 空对象模式
- 一个空对象取代NULL对象实例的检查。Null对象不是检查空值,而是反应一个不做任何动作的关系。
【没看懂它想干啥】
- 空对象模式
public abstract class AbstractCustomer{
public abstract boolean isNil();
}
public class RealCustomer extends AbstractCustomer{}
public class NullCustomer extends AbstractCustomer{}
public class CustomerFactory{}
10. 策略模式【将操作封装起来】
- 一个类的行为或其算法可以在运行时更改。
【将操作封装起来】
- 策略模式的实现流程
public interface Strategy{}
public class OperationAdd implements Strategy{
}
public class OperationSubtract implements Strategy{
}
public class Context{
}
11. 模板模式【模板】
- 一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。
【模板】
- 模板模式的实现流程
public abstract class Game {
abstract void initialize();
abstract void startPlay();
abstract void endPlay();
public final void play(){
initialize();
startPlay();
endPlay();
}
}
public class Circket extends Game{}
public class Football extends Game{}
12. 访问者模式【对象不变,算法变】
- 改变元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变
【对象不变,算法变】
- 访问者模式的实现流程
public interface ComputerPart{}
public class Keyboard implements ComputerPart{}
public class Monitor implements ComputerPart{}
public class Mouse implements ComputerPart{}
public interface ComputerPartVisitor{
public void visit(Computer computer);
public void visit(Mouse mouse);
public void visit(Keyboard keyboard);
public void visit(Monitor monitor);
}
public class ComputerPartDisplayVisitor implements ComputerPartVisitor{}