- 浏览: 25464 次
- 性别:
- 来自: 成都
最新评论
文章列表
备忘录模式:保存对象的某一时刻的状态,进行存储
优点:实现对象的回滚,可以对数据进行恢复和保存
标准类图:
主体类:
public class Originator {
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public void restore(Memo memo){
this.setState(memo. ...
访问者模式:将对象的变化(共享)和不变部分(不共享)进行分离,将变化部分交由具体的访问者执行,访问者可以根据具体的类进行动作
优点:封装不变部分,扩展变化部分,一般是在循环抽象对象时候,由访问者来对不同的具体对象进行操作
标准类图:
抽象元素:
public interface Element {
public void accept(Visitor visitor);
}
具体元素:
public class ConcreteElement1 implements Element{
@Override
public void a ...
状态模式:一个对象的内部状态发生改变会引起行为的改变,此种变化会引起类的变化
优点:避免过多的if-else语句,扩展性良好,有很强的封装性
标注类图:
模拟电梯状态行为:
电梯类:
public class Lift {
public static final LiftOpenState OPEN_STATE = new LiftOpenState();
public static final LiftCloseState CLOSE_STATE = new LiftCloseState();
public static final LiftStopStat ...
享元模式:通过池技术,对细粒度对象提供共享支持
优点:节省对象创建时间,减少内存开支,降低性能消耗
标准类图:
抽象享元:
public abstract class FlyWeight {
protected String externalAttribute;//external attribute
public FlyWeight(String externalAttribute) {
super();
this.externalAttribute = externalAttribute;
}
protected abstrac ...
空对象模式:使用对象继承来实现程序中的空判断
优点:增加程序可读性
空对象接口:
public interface NullObject {
boolean isNull();
}
原对象:
public class Subject implements NullObject{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ ...
门面模式:建立一个统一的对象对来提供子系统外部和内部的通讯方式,子系统外部只能通过此对象对子系统内部进行访问
优点:细节隐藏,高层调用不用关心底层实现,避免产生高度的耦合关系
标准类图:
子系统中的类:
public class Class1 {
public void foo4(){
System.out.println("foo4");
}
public void foo5(){
System.out.println("foo5");
}
public void foo6(){
...
适配器模式:改变遗留对象的抽象(接口),以匹配当前的环境,使得其能够正常的工作
优点:可以让两个没有任何关联的对象匹配在一起运行,而对用调用者来说是透明的,适配器是一种补救措施,在设计阶段一般不考虑。
标准类图:
目标接口:
public interface TargetInterface {
void targetMethod();
}
目标实现:
public class Target implements TargetInterface{
@Override
public void targetMethod() {
System ...
观察者模式:定义对象的一对多依赖关系,使得每当一个对象状态更改都会通知关联对象进行自动更新
优点:建立触发机制,观察者和被观察者分离,调用者不用关心具体的观察者行为
标准类图:
抽象主题:
public abstract class Subject {
private List<Observer> observers = new ArrayList<>();
public void addObserver(Observer observer){
this.observers.add(observer);
}
pu ...
策略模式:抽象一个算法,并封装不同的算法,使得不同算法之间可以相互切换。
优点:扩展性良好,不同算法之间可以自由切换,不需要冗余的if-else语句
标准类图:
抽象算法:
public interface Strategy {
void algorithm();
}
具体算法:
public class ConcreteStrategy1 implements Strategy{
@Override
public void algorithm() {
System.out.println("这是算法1&q ...
中介者模式:使用一个中介对象封装对象与其他对象之间的操作行为,使得原本产生交叉蜘蛛网状的对象关系变成星型关系
优点:降低对象与对象之间的耦合,满足迪米特法则
标准类图:
抽象中介者:
public abstract class Mediator {
protected ConcreteColleague1 concreteColleague1;
protected ConcreteColleague2 concreteColleague2;
public ConcreteColleague1 getConcreteColleague1() {
re ...
责任链模式:将请求封装成一个对象,使得多个对象都有机会对该对象进行处理,这些对象组成一条链状结构,请求延着链条进行传递。
优点:去除冗余的if-else语句,对请求的发出者和请求的接收者进行解耦,通过类间继承关系进行扩展
标准类图:
抽象处理者:
public abstract class Handler {
private Handler handler;
public void setNext(Handler handler){
this.handler = handler;
}
public void handleRequest( ...
命令模式:将请求封装成一个命令,使用命令对象将请求的调用者和接收者进行分离,从而降低耦合性
优点:类间解耦,具有良好的扩展性
标准类图:
抽象接收者:
public interface Receiver {
void doSomething();
}
具体接受者:
public class ConcreteReceiver implements Receiver {
@Override
public void doSomething() {
System.out.println("do some thing& ...
装饰模式:动态的给一个对象添加额外的职责
优点:以调用者透明的方式,动态的改变对象的行为
使得装饰对象和主题对象独立,降低耦合性
装饰模式跟静态代理模式方式非常类似,而关注点不同,装饰模式关注点是对对象行为的增强和减弱,可能会改变主题对象的默认行为,而静态代理模式只是对主题对象的访问控制,不会干预对象的默认行为。
标准类图:
代理模式:使用代理对象对源对象进行访问控制
优点:
1.以调用者透明的方式,动态的改变对象的行为
2.主题对象不会改变,高扩展性,需要产生新的行为通过建立代理对象进行
3.职责明确,不同的代理类进行不同职责的代理,又跟主题对象进行了严格的区别
标准类图:
静态代理:
抽象主题类:
public interface Subject {
public void doSomething();
}
具体主题类:
public class ConcreteSubject implements Subject{
@Override
publ ...
模板方式模式:由父类定义一个算法的骨架,而让具体某些步骤延迟到子类进行实现
模板方法优点:
1.封装不变的部分,扩展变化的部分
2.提取公共部分代码,便于维护
3.行为由父类控制,子类实现
标准类图:
定义抽象类(抽象类中定义模板方法和基础方法,基础方式由子类进行实现):
public abstract class Hummer {
protected abstract void start();
protected abstract void engineBoom();
protected abstract void alarm();
...