设计模式

责任链模式

abstract class AbstractHander {
    private AbstractHander nextHander;

    public void setNextHander(AbstractHander nextHander) {
        this.nextHander = nextHander;
    }

    public final void doHander(int level) {
        if (canHander(level)) {
            doSomething(level);
        } else {
            if (nextHander != null) {
                nextHander.doHander(level);
            } else {
                System.out.println("all hander cannot hander");
            }
        }
    }

    protected abstract boolean canHander(int level);

    public abstract void doSomething(int level);

}

class InfoHander extends AbstractHander {

    @Override
    protected boolean canHander(int level) {
        if (level >= 0 && level <= 10) {
            return true;
        }
        return false;
    }

    @Override
    public void doSomething(int level) {
        System.out.println("InfoHander handler " + level);
    }
}


class DebugHander extends AbstractHander {

    @Override
    protected boolean canHander(int level) {
        if (level > 10) {
            return true;
        }
        return false;
    }

    @Override
    public void doSomething(int level) {
        System.out.println("DebugHander handler " + level);
    }
}

public class Main {
    public static void main(String... arg) {
        InfoHander infoHander = new InfoHander();
        DebugHander debugHander = new DebugHander();
        infoHander.setNextHander(debugHander);
        System.out.println("test -1");
        infoHander.doHander(-1);
        System.out.println("test 5");
        infoHander.doHander(5);
        System.out.println("test 11");
        infoHander.doHander(11);

    }
}

监听者模式

interface Listener {
    void alarm();
}

class MyListener implements Listener {

    @Override
    public void alarm() {
        System.out.println(this.getClass().getName()+"报警");
    }
}

class Ketter {
    Listener listener;

    public void registerListener(Listener listener) {
        this.listener = listener;
    }

    public void boilded() {
        System.out.println("水开了");
        listener.alarm();
    }
}

public class Main {
    public static void main(String... arg) {
        Ketter ketter = new Ketter();
        Listener listener = new MyListener();
        ketter.registerListener(listener);
        ketter.boilded();
    }

}

观察者模式(类似监听者模式)


interface Observer {
    void notice();
}

class AlarmObserver implements Observer {

    @Override
    public void notice() {
        System.out.println(this.getClass().getName() + " notified");
    }
}

class Subject {
    List<Observer> observers;

    public void subscribe(Observer observer) {
        if (observers == null) {
            observers = Lists.newArrayList();
        }
        observers.add(observer);
    }

    public void changeState() {
        System.out.println("subject changed");
        observers.forEach(Observer::notice);
    }
}

public class Main {

    public static void main(String... arg) {
        AlarmObserver observer = new AlarmObserver();
        Subject subject = new Subject();
        subject.subscribe(observer);
        subject.changeState();
    }
}

订阅者模式

 


class Topic {
    private Map<String, List<Subscriber>> topicMap;

    public void subscribe(Subscriber subscriber, String topic) {
        if (topicMap == null) {
            topicMap = Maps.newHashMap();
        }
        topicMap.computeIfAbsent(topic, key -> Lists.newArrayList()).add(subscriber);
    }

    public void notice(String topic) {
        List<Subscriber> subscribers = topicMap.computeIfAbsent(topic, k -> topicMap.put(topic, null));
        if (subscribers != null) {
            subscribers.forEach(Subscriber::notice);
        }
    }
}

interface Subscriber {
    void notice();
}

class BookSubscriber implements Subscriber{

    @Override
    public void notice() {
        System.out.println("1");
    }
}

interface Publisher {
    void publish(String topic);
    void setBookTopic(Topic topic);
}


class BookPublisher implements Publisher {
    Topic bookTopic;
    @Override
    public void setBookTopic(Topic topic) {
        bookTopic = topic;
    }

    @Override
    public void publish(String newtopic) {
        bookTopic.notice(newtopic);
    }
}

public class Main {

    public static void main(String... arg) {
        Topic bookTopic = new Topic();
        Publisher publisher = new BookPublisher();
        publisher.setBookTopic(bookTopic);
        Subscriber subscriber = new BookSubscriber();
        bookTopic.subscribe(subscriber,"1");
        publisher.publish("1");
        publisher.publish("2");
    }


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值