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、如果找不到使用的模式怎么办

     

     

           

  • 相关阅读:
    IE浏览器下常见的CSS兼容问题
    Android studio 使用问题汇总
    IOS中的属性列表----Property List
    自定义组件-BreadcrumbTreeView 的使用
    IOS开发之数据sqlite使用
    深入分析动态管理Fragment
    IOS开发中多线程的使用
    Java中导入、导出Excel
    IOS数据持久化之归档NSKeyedArchiver
    Bugfree3.0.4 Linux环境安装指南
  • 原文地址:https://www.cnblogs.com/lzb0803/p/9089531.html
Copyright © 2011-2022 走看看