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

    多态和策略模式有着一些相同之处,这点我主要从概念上面来理解。

    多态:相同类型的变量,调用同一个方法时呈现出多种不同的行为特征,主要是通过继承来实现,将子类对象直接赋给父类引用变量,这样在编译时引用变量类型是父类类型,而运行时类型是子类类型,导致运行时调用该引用变量的方法总会表现子类方法,而调用其引用变量的属性则会表现出父类属性。

    策略模式:定义了实现,用接口来封装起来,通过构造器的构造参数不同使得实现有所不同。

    多态代码:

    package test.testforpolymorphism;

    public class BaseClass {
        public int book = 6;
        public void base()
        {
            System.out.println("superclass basic mothen");
        }
        
        public void test()
        {
            System.out.println("superclass overrided mothen");
        }
    }

    package test.testforpolymorphism;

    public class SubClass extends BaseClass {
        public String book = "JavaEE";
        public void test()
        {
            System.out.println("subclass override father's mothen");
        }
        
        public void sub()
        {
            System.out.println("subclass original mothen");
        }
                
    }   

    package test.testforpolymorphism;

    public class TestForPolymorphism {
        public static void main(String[] args)
        {
            BaseClass bc = new BaseClass();
            System.out.println(bc.book);
            bc.base();
            bc.test();
            
            SubClass sc = new SubClass();
            System.out.println(sc.book);
            sc.base();
            sc.test();
            
            BaseClass ploymophicBc = new SubClass();
            System.out.println(ploymophicBc.book);
            ploymophicBc.base();
            ploymophicBc.test();
        }
    }

    策略代码:

    package test.testforstratagy;

    public class Salesman {

        public static void main(String[] args) {
            Context context;
            
            System.out.println("you are a silly man");
            context = new Context(new CheatYou());
            context.SalesmanBehavior();
            
            System.out.println("you are a smart man");
            context = new Context(new HonorYou());
            context.SalesmanBehavior();
            
            
        }

    }

    package test.testforstratagy;

    public interface IStratagy {
        public void operate();
    }

    package test.testforstratagy;

    public class Context {
        IStratagy iStratagy;
        
        public Context(IStratagy iStratagy)
        {
            this.iStratagy = iStratagy;
        }
        
        public void SalesmanBehavior()
        {
            iStratagy.operate();
        }
    }

    package test.testforstratagy;

    public class CheatYou implements IStratagy {
        public void operate()
        {
            System.out.println("cheat you");
        }
    }

    package test.testforstratagy;

    public class HonorYou implements IStratagy{
        public void operate()
        {
            System.out.println("Honor you");
        }
    }

    总体来讲,二者的思想和目的是基本一致的。

  • 相关阅读:
    切割自动贴标机功能、原理与常见问题回答
    WINCE中蓝牙扫描模块现10050,控制器无法找到错误的解决思路
    在WINCE中基于ActiveSync的Socket通信 c#
    cs关于房间分配
    JS判断单、多张图片加载完成
    在网站中添加 React
    tcp读取数据的方法
    微软发布2011年耐用消费品行业微软CRM解决方案 一方水土
    Microsoft Dynamics CRM4.0介绍 一方水土
    徐工集团再度携手瑞泰搭建Call Center管理平台 一方水土
  • 原文地址:https://www.cnblogs.com/ty10114g/p/3722007.html
Copyright © 2011-2022 走看看