zoukankan      html  css  js  c++  java
  • 策略模式

     

    设计模式是人们在面对同类型的软件工程设计问题所总结出来的一些有用经验,模式不是代码,而是某类问题的通用设计方案

     

    public abstract class Duck {
        public void Quack() {
            System.out.println("~~gaga~~");
        }
        public abstract void display();
        public void swim() {
            System.out.println("~~im swim~~");
        }
    
    }

     

    public class GreenHeadDuck extends Duck {
        @Override
        public void display() {
            System.out.println("**GreenHead**");
        }
    }

     

    1、添加新的需求:要求鸭子会飞,面向对象的解决方案是

    public abstract class Duck {
            ...;
            public void Fly() {
            System.out.println("~~im fly~~");
        }    
    }

    这样设计的问题:

     使用面向对象解决:

    public class GreenHeadDuck extends Duck {
    ...;
    public void Fly() {
            System.out.println("~~no fly~~");
        }    
    }
    public interface FlyBehavior 
        {
        void fly();
    }
            
    public    interface QuackBehavior {
        void quack();
    }

    好处:新增行为简单,行为类更好的复用,组合方便,既有继承带来的复用好处

    public abstract class Duck {
        FlyBehavior mFlyBehavior;
        QuackBehavior mQuackBehavior;
        public Duck() {    }
        public void Fly() {
            mFlyBehavior.fly();
        }
        public void Quack() {
            mQuackBehavior.quack();
        }
        public abstract void display();
        }
    }
    public class GreenHeadDuck extends Duck {
        public GreenHeadDuck() {
            mFlyBehavior = new GoodFlyBehavior();
            mQuackBehavior = new GaGaQuackBehavior();
        }
        @Override
        public void display() {...}
    }

    策略模式:分别封装行为接口实现算法族,在子类中具体设定行为对象,原则就是:分离变化接口,封装接口,基于接口编程,此模式让行为算法的变化独立于算法的使用者

     

     使用注意点:

      1、分析项目的变化部分和不变化部分

      2、多用组合,少用继承,用行为类组合,而不是行为的继承,更有弹性

      3、设计模式有没有相应的库直接使用,有些库或框架本身就用某种设计模式的

      4、如果找不到使用的模式怎么办

     

     

           

  • 相关阅读:
    科研第四天
    科研第三天
    科研的第一天
    django_1.6.8学习笔记——创建project
    第一个project,累哭的第一个app
    前记
    线性表——单链表小结(腾讯面试题)(4)
    一个考试模拟界面——先记录一下下ui上的东东
    源码0602-05-掌握-多值参数
    源码0602-03-掌握-XML解析-NSXMLParser
  • 原文地址:https://www.cnblogs.com/lzb0803/p/9089531.html
Copyright © 2011-2022 走看看