设计模式

来源:互联网 发布:python监控系统性能 编辑:程序博客网 时间:2024/06/13 23:55

1. 工厂模式

分为简单工厂模式(要工厂做什么就做什么,通过不同的参数生成不同的实体)、工厂方法模式(通过接口定义工厂,然后继承接口生成不同的产品)和抽象工厂模式(通过接口定义每个产品细分的每个项,然后组装成一个产品)

2..单例模式

3.装饰模式

动态给一个对象添加一些额外的职责

这个比较适合装饰模式的例子,是在原有基础上进行扩展
而策略模式相对而言每个策略是相互独立的

public static void main(String[] args) {

//Change为装饰器,典型的缓冲流中BufferedReader就用了装饰模式
TheGreatestSage monkey = new Monkey();

TheGreatestSage fish = new Fish(monkey);

//完全透明
TheGreatestSage bird = new Bird(fish);

//半透明
//装饰模式的用意是在不改变接口的前提下,增强所考虑的类的性能,半透明
//的装饰模式是介于装饰模式和适配器模式之间的。适配器模式的用意是改变所考虑的类的接口
Bird halfBird = new Bird(fish);

//monkey.move();
//fish.move();
//bird.move();
}


4.适配器模式:分为类适配模式(继承需要适配的类和实现接口)、对象适配模式(把需要适配的类作为属性放到适配器类里面)和缺省适配模式(鲁智深的故事,天星)


5.策略模式:

 策略模式的好处在于你可以动态的改变对象的行为,每个策略之间是相互独立的,而装饰模式恰恰不是,是有关联的,实现起来比较相似,都是实现接口,然后把接口定义成属性,然后是构造的时候传递接口对应的实现

6.责任链模式:

(1)概念:将能够处理同一类请求的对象连成一条链所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能则处理,如果不能则传递给链上的下一个对象。

(2)应用场景:

Java中的异常机制就是一种责任链模式,catch链就是一种责任链。
Servlet中的过滤器的链式处理。

JavaScript中的时间冒泡和捕获机制。
Structs2中拦截器的调用。

(3)代码:

 
/**
 * 责任链
 * @author wxisme
 *
 */
public abstract class Handler {
    protected Handler nextHandler;
    public abstract void handleRequest(int req);
    public Handler getNextHandler() {
        return nextHandler;
    }
    public void setNextHandler(Handler nextHandler) {
        this.nextHandler = nextHandler;
    }
     
}
 
class ConcreteHandler1 extends Handler {
     
    @Override
    public void handleRequest(int req) {
        if(req == 1) {
            System.out.println("1处理请求");
        }
        else {
            System.out.println("1释放请求");
            this.nextHandler.handleRequest(req);
        }
    }
}
class ConcreteHandler2 extends Handler {
     
    @Override
    public void handleRequest(int req) {
        if(req == 2) {
            System.out.println("2处理请求");
        }
        else {
            System.out.println("2释放请求");
            this.nextHandler.handleRequest(req);
        }
    }
}
class ConcreteHandler3 extends Handler {
     
    @Override
    public void handleRequest(int req) {
        if(req == 3) {
            System.out.println("3处理请求");
        }
        else {
            System.out.println("3释放请求");
            this.nextHandler.handleRequest(req);
        }
    }
}
 
public class Client {
    public static void main(String[] args) {
        Handler h1 = new ConcreteHandler1();
        Handler h2 = new ConcreteHandler2();
        Handler h3 = new ConcreteHandler3();
         
        h1.setNextHandler(h2);
        h2.setNextHandler(h3);
         
        h1.handleRequest(1);
        System.out.println("-----------");
        h1.handleRequest(2);
        System.out.println("-----------");
        h1.handleRequest(3);
    }
}


0 0
原创粉丝点击