首页 > 其他 > 详细

接口(策略设计模式)

时间:2019-08-01 01:35:55      阅读:140      评论:0      收藏:0      [点我收藏+]

总结接口的知识点

(菜鸟一只,有侵权或者不足之处请指出,谢谢)

 

Java接口

   接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
 
 语法:
 使用关键字interface关键字来定义。

 注意:定义的接口文件仍然是.java文件。虽然声明的时候使用interface关键字,编译之后仍然是.class

 

    接口可以理解为一种特殊的类(可以看成100%的抽象类),里面全部是由常量和公共的抽象方法所组成,接口是解决Java无法使用多继承的一种手段,但是接口在实际中更多的作用是制定行为标准的。

 

(1)我们不能直接去实例化一个接口,因为接口中的方法都是抽象的,是没有方法体的。

  但是,我们可以使用接口类型的引用指向一个实现了该接口的对象,并且可以调用这个接口中的方法。(实际上就是使用了Java中多态的特性),比如:

  IStraegy con = new BackDoor();(语法: 接口名 接口类指引名 = new 实现了接口对象() )

  con.operate();//通过接口类指引名调用方法

  (个人觉得这是非常实用的)

 

(2)一个类可以实现不止一个接口。


(3)接口也可以继承,并且可以多继承,所以接口可以用来弥补类无法实现多继承的局限。


(4)一个类如果要实现某个接口的话,那么它必须要实现这个接口中的所有方法。


(5)接口中所有的方法都是抽象方法,所有的属性都是public static final的。接口类的中的抽象方法和接口的成员变量访问权限都是public,写和不写都是这个权限,实现类中的方法的权限也必须是public。否则报错!!!


(6)接口可以用来实现解耦

实例:

 

//接口
interface IStraegy{
    public void operate();
}
//锦囊1
class BackDoor implements IStraegy{
    @Override
    public void operate() {
        System.out.println("找乔国老帮忙,让吴国不杀刘备");
    }
}

//锦囊2
class GoBack implements IStraegy{
    @Override
    public void operate() {
        System.out.println("找吴国太帮忙,回国");
    }
}
//锦囊3
class BackThree implements IStraegy{
    @Override
    public void operate() {
        System.out.println("孙尚香断后");
    }
}
//环境类
class Context{
    
    private IStraegy istraegy;
    
    //构造器
    //接口类型的引用指向一个实现了该接口的对象,这里传入实现了该接口的对象
    public Context(IStraegy istraegy) {
        this.istraegy = istraegy;
    }
    
    public void operate() {
        this.istraegy.operate();
        
    }
}
//策略设计模式
public class TextDemo02 {
    
    public static void main(String[] args) {
        //使用一个接口引用指向对象
        //USB接口类引用可以指向一个实现了USB接口的对象
//        IStraegy con = new BackDoor();
//        con.operate();
        
        Context context;
        System.out.println("----刚到,拆第一个锦囊-----");
        
        context = new Context(new BackDoor());
        context.operate();
        
        System.out.println("\n\n");
        
        System.out.println("-----刘备乐不思蜀,拆第二个锦囊-----");
        context = new Context(new GoBack());
        context.operate();
        
        System.out.println("\n\n");
        
        System.out.println("----孙权追兵,拆第三个锦囊-----");
        context = new Context(new BackThree());
        context.operate();
        
        System.out.println("赔了夫人又折兵");
    }
}

 

该实例中使用了简单的策略设计模式(策略设计模式:体现了高内聚,低耦合)

简单介绍策略设计模式

策略(Strategy)模式

    该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。

 

语法:

(1)抽象策略(Strategy)类:定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现。
(2)具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现。
(3)环境(Context)类:持有一个策略类的引用,最终给客户端调用。

策略模式的主要优点如下。

  1. 多重条件语句不易维护,而使用策略模式可以避免使用多重条件语句。
  2. 策略模式提供了一系列的可供重用的算法族,恰当使用继承可以把算法族的公共代码转移到父类里面,从而避免重复的代码。
  3. 策略模式可以提供相同行为的不同实现,客户可以根据不同时间或空间要求选择不同的。
  4. 策略模式提供了对开闭原则的完美支持,可以在不修改原代码的情况下,灵活增加新算法。
  5. 策略模式把算法的使用放到环境类中,而算法的实现移到具体策略类中,实现了二者的分离。


其主要缺点如下。

    1. 客户端必须理解所有策略算法的区别,以便适时选择恰当的算法类。
    2. 策略模式造成很多的策略类。

详细可参考:http://c.biancheng.net/view/1378.html

 

 

 

坚持学习 永远年轻 永远热泪盈眶

本文中策略设计模式内容借鉴于http://c.biancheng.net/view/1378.html

 

接口(策略设计模式)

原文:https://www.cnblogs.com/jiang0123/p/11192077.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!