zoukankan      html  css  js  c++  java
  • JAVA设计模式一策略模式(Strategy Pattern)

    什么是设计模式?

    就是一些经验。让程序代码更具弹性、好维护、代码复用的经验。而且设计模式都遵从一些OO设计原则。

    题外话:以下罗列出常用的OO设计原则:链接

    本文章介绍策略模式(Strategy Pattern)。

    一、定义:

      定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

    二、用到的设计原则:

    1 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起

    一般情况下,稳定的部分利用继承,变化的部分利用接口。

    1 针对接口编程,而不是针对实现编程。

    // Animal是一个接口  Dog 类实现了Animal接口
    //针对实现编程
    Dog d=new Dog();
    //针对接口编程
    Animal animal=new  Dog();

    2 多用组合,少用继承。

    某一个具体类的行为,不通过继承父类获得,也不通过直接实现接口获得。而是把接口作为变量定义在该具体类中,如果该具体类想要使用这个行为。
    在调用这个具体类的时候,set这个接口的具体实现类对象进去,即可获得想要的行为。

    三、例子:

    题目:公司做了一套模拟鸭子的游戏:呱呱。游戏中会出现各种鸭子,一遍游泳戏水,一边呱呱叫。公司要求,让部分鸭子可以飞翔。鸭子的叫法各不相同,鸭子的飞翔姿势各不相同。试问,如何设计?

    public abstract Class Duck{
    
    //组合 FlyBehavior flyBehavior ; QuackBehavior quackBehavior;
    public Duck(){} public void setFlyBehavior(FlyBehavior fb){ flyBehavior =fb; } public void setQuackBehavior(QuackBehavior qb){ quackBehavior=qb; }

    public void performFly(){
    flyBehavior.fly();

    }

    public vod perfromQuack(){
    quackBehavior.quack();
    }
    //稳定部分的代码在这里直接实现就好,直接让子类继承,提高代码复用。
    //抽象类真的就是生来被用来继承的。为什么变化的部分不在这里写一个抽象方法,
    //因为,写接口是为了复用。
    
    }
    
    }

    public class GreenDuck extends Duck{
    
        public GreenDuck(){}
    
        public void display(){
    
            System.out.println("我是一只绿鸭子!!!");
       }
    }
    public interface FlyBehavior{
         public void fly(){};
    }
    
    public class Fly1 implements FlyBehavior{
    
        public void fly(){
             System.out.println("我正在用第一种方式飞翔!!!");
        }
    }
    
    
    public class Fly2 implements FlyBehavior{
    
        public void fly(){
             System.out.println("我正在用第二种方式飞翔!!!");
        }
    }
    public interface QuackBehavior{
         public void quack(){};
    }
    
    public class Quack1 implements QuackBehavior{
    
        public void quack(){
             System.out.println("我正在用第一种方式叫!!!");
        }
    }
    
    
    public class Quack2 implements QuackBehavior{
    
        public void quack(){
             System.out.println("我正在用第二种方式叫!!!");
        }
    }
    

      

    public class Test{
         
        public static void main(String[] args){
           //接口编程
           Duck duck=new GreenDuck();
           //组合的调用
           duck.setFlyBehavior(new Fly1());
    
           duck.performFly();
       }
    
    
    }

    四、个人理解:以上。

  • 相关阅读:
    oracle 10g 免安装客户端在windows下配置
    sql2005 sa密码
    使用windows live writer 有感
    windows xp SNMP安装包提取
    汉化groove2007
    迁移SQL server 2005 Reporting Services到SQL server 2008 Reporting Services全程截图操作指南
    foxmail 6在使用中的问题
    AGPM客户端连接不上服务器解决一例
    SpringSource Tool Suite add CloudFoundry service
    Java 之 SWing
  • 原文地址:https://www.cnblogs.com/haiqin/p/9111439.html
Copyright © 2011-2022 走看看