Lambda 重构面向对象设计模式1

策略模式

策略模式包含三部分内容

1.一个代表某个算法的接口(它是策略模式的接口)。

2.一个或多个该接口的具体实现,它们代表了算法的多种实现(比如,实体类ConcreteStrategyA或者ConcreteStrategyB)。

 3.一个或多个使用策略对象的客户。

重构前:

    //策略接口
    public interface Strategy {
        boolean execute(String s);
    }

    //具体实现类
    public class IsAllLowerCaseStrategy implements Strategy {
        public boolean execute(String s) {
            return s.matches("[a-z]+");
        }
    }

    //具体实现类
    public class IsNumericStrategy implements Strategy {
        public boolean execute(String s) {
            return s.matches("\\d+");
        }
    }
    //组装工厂
    public class Validator{
        private final Strategy strategy;
        public Validator(Strategy v){
            this.strategy = v;
        }
        public boolean validate(String s){
            return strategy.execute(s);
        }
    }

    //策略使用
    @Test
    public void testStrategy() {
        Validator numericValidator = new Validator(new IsNumericStrategy());
        boolean isNumeric = numericValidator.validate("234234");
        System.out.println(isNumeric);

        Validator lowerCaseValidator = new Validator(new IsAllLowerCaseStrategy());
        boolean isLowerCase = lowerCaseValidator.validate("AB");
        System.out.println(isLowerCase);
    }

重构后:具体算法用Lambda实现

    //定义策略接口
    public interface Strategy {
        boolean execute(String s);
    }

    //组装工厂
    public class Validator{
        private final Strategy strategy;
        public Validator(Strategy v){
            this.strategy = v;
        }
        public boolean validate(String s){
            return strategy.execute(s);
        }
    }

    //Lambda实现
    @Test
    public void testStrategy2() {
        Validator numericValidator =
                new Validator((String s) -> s.matches("\\d+"));
        boolean isNumeric = numericValidator.validate("234234");
        System.out.println(isNumeric);

        Validator lowerCaseValidator =
                new Validator((String s) -> s.matches("[a-z]+"));
        boolean isLowerCase = lowerCaseValidator.validate("bbbb");
        System.out.println(isLowerCase);
    }

模板方法

重构前:

 /**
     * 定义模板
     */
    public abstract class AbstractClass {
        public final void templateMethod(int i) {
            //模板方法1
            method1(i);
        }
        protected abstract void method1(int i);

    }

    /**
     * 模板实现1
     */
    public class ConcreteClass1 extends AbstractClass {
        @Override
        protected void method1(int i) {
            System.out.println("ConcreteClass1 method1");
        }

    }


    @Test
    public void test4() {
        AbstractClass demo = new ConcreteClass1();
        demo.templateMethod(1);
    }

重构后:

    /**
     * 定义模板
     */
    public class AbstractClass2 {
        public final void templateMethod(int i, Consumer<Integer> method1) {
            method1.accept(i);
        }
    }

    /**
     * 调用
     */
    @Test
    public void testAbstractClass() {
       new AbstractClass2().templateMethod(1, (Integer c) -> {
           System.out.println(c);
       });
    }

观察者模式

重构前

    /**
     * 定义主题接口
     */
    public interface Subject {
        //注册观察者
        void registerObserver(Observer observer);
        //移除观察者
        void removeObserver(Observer observer);
        //通知
        void notifyObservers(String message);
    }

    /**
     * 定义观察者接口
     */
    public interface Observer {
        void update(String message);
    }

    /**
     * 主题类实现
     */
    public class ConcreteSubject implements Subject {
        private List<Observer> observers = new ArrayList<Observer>();

        @Override
        public void registerObserver(Observer observer) {
            observers.add(observer);
        }

        @Override
        public void removeObserver(Observer observer) {
            observers.remove(observer);
        }

        @Override
        public void notifyObservers(String message) {
            for (Observer observer : observers) {
                observer.update(message);
            }
        }

    }

    /**
     * 观察者1
     */
    public class ConcreteObserverOne implements Observer {
        @Override
        public void update(String message) {
            //TODO: 获取消息通知,执行自己的逻辑...
            System.out.println(message);
        }
    }

    /**
     * 观察者2
     */
    public class ConcreteObserverTwo implements Observer {
        @Override
        public void update(String message) {
            //TODO: 获取消息通知,执行自己的逻辑...
            System.out.println(message);
        }
    }

    /**
     * 具体实现
     */
    @Test
    public void test5() {
        ConcreteSubject subject = new ConcreteSubject();
        subject.registerObserver(new ConcreteObserverOne());
        subject.registerObserver(new ConcreteObserverTwo());
        subject.notifyObservers("Hello world!");
    }

重构后

    /**
     * 定义主题接口
     */
    public interface Subject {
        //注册观察者
        void registerObserver(Observer observer);
        //移除观察者
        void removeObserver(Observer observer);
        //通知
        void notifyObservers(String message);
    }

    /**
     * 定义观察者接口
     */
    public interface Observer {
        void update(String message);
    }

    /**
     * 主题类实现
     */
    public class ConcreteSubject implements Subject {
        private List<Observer> observers = new ArrayList<Observer>();

        @Override
        public void registerObserver(Observer observer) {
            observers.add(observer);
        }

        @Override
        public void removeObserver(Observer observer) {
            observers.remove(observer);
        }

        @Override
        public void notifyObservers(String message) {
            for (Observer observer : observers) {
                observer.update(message);
            }
        }

    }

    /**
     *重构后
     */
    @Test
    public void test6() {
        ConcreteSubject subject = new ConcreteSubject();
        subject.registerObserver((String message) -> {
            if (message != null && message.contains("hello"))
            System.out.println("你好:" + message);
        });

        subject.registerObserver((String message) -> {
            if (message != null && message.contains("world"))
                System.out.println("你好:" + message);
        });
        subject.notifyObservers("hello");
    }

《中医基础理论》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

古智云开

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值