Java简单工厂模式以及接口基础

来源:互联网 发布:php 存储过程 编辑:程序博客网 时间:2024/06/04 22:47
package second;/* * 任务: * 1.多态:作为参数和返回值的多态应用  上课例子 简单工厂设计模式 * 2.接口:策略设计模式实践 *//* * 一、工厂设计模式: * 简单工厂 * 工厂方法 * 抽象工厂 *  *//* * 简单工厂设计模式: * 作用:工厂实现不同类实例的创建,用同一种调用方式,简化操作 *  *//* * 接口: * 1.定义:接口是一种规范,是一种定义和分离的设计哲学。降低程序各个模块的耦合,提供扩展和维护性。 *     接口是一种更加特殊的抽象类,它里面不能包含普通方法,只能是抽象方法 *     注意我们总是以为pc插槽是接口,其实是错误的,插槽遵守的规则才是接口,而PC插槽只是接口的实例 * 2.具体定义方式: *   修饰符 interface 接口名 extends 父接口1,父接口2.。 *   { *   //以下所有成员默认和加修饰只能为public *    *   //常量定义:成员变量  (静态常量)系统自动添加 static final   且接口没有初始化和构造函数 只能在定义时就设置默认值 *   int a =10; *   public static finally b = 12; *    *   //抽象方法定义:抽象实例方法和类以及默认方法    *   //         接口里不能有普通方法  接口里定义的普通方法将会默认添加abstract  且普通方法不能有方法体 *   //         接口里的类和默认方法必须有实现体 *    *   //内部类,接口,枚举定义  系统自动加public static  *   //零到多个默认方法或者类方法定义 *   } *   //修饰符:public(所有范围可见),defualt(包之间不可见,包内可见) *   //接口名:命名规则和类一致 *   //接口可以有多个父类接口,但是只能继承接口,不能继承类 * 3.接口特性: * 接口的定义的是多个类共同行为的一种规范,所以不能实例,自热没有构造函数和初始化块的定义 * 4.接口和类的区别: *    接口中所有成员都是public访问权限(规范性质决定) *    接口里的方法只能是抽象方法和类方法和默认方法 *    接口成员比类成员少两种 * 5.程序实现: * 6.接口继承:支持多继承子类继承将会获得父类里所有的成员方法和变量 * 7.继承定义方式: *  public interface A extends B,C,D{} * 8.使用接口: implement弥补java中的单继承 * 9.使用接口的定义形式: * class A extends B implements a,b{} * 10.实现的特性: *    可以创建接口类型的实类对象  并且把他继承为Object a *    实现可以看为特殊的继承 *    一个类继承了该接口,则必须实现该接口的所有抽象方法 * 11.     *   * */class Factory{//定义工厂类   负责生产类    public static Car getString(String name){//有必要加static吗?        //必须加static 为了工厂类 通过类名调用生产实例的方法getName()        if (name.equals("RollsRoyce")){            return (new RollsRoyce());        }        if(name.equals("Bentley")){            return (new Bentley());        }else{            System.out.println("该工厂不能生产"+name+"类型的实例");            return null;        }    }}interface Car{//接口有两种修饰属性 但此处public不能使用 因为文件中已经包含一个public    //普通方法不能定义方法体     public String getName();    //定义成员变量一定是静态常量  以下一致    int a = 0;    public static final int b =0;    //定义默认方法 前面加default    //默认方法不能用static修饰 所以要调用必须使用接口的实例调用    default void fun(){        System.out.println("默认方法定义修饰符为defualt");    }    //定义类方法    //类方法可以用接口来调用    static void function(){        System.out.println("定义类方法必须加static修饰");    }}class RollsRoyce implements Car{//生产劳斯莱斯的类    public String getName(){        return "RollsRoyce";    }   }class Bentley implements Car{//生产宾利的类    public String getName(){        return "Bentley";    }}/*//即使另一个类属于另一个包中,也可以调用该接口 * package one; *  * class Test{ *  public static void main(String args[]){ *      //调用常变量 *      System。out。println(second.Car.a); *      second.Car.a =1;//报错 final赋值异常 *      //调用类方法 *      System.out.println(second.Car.function()); *      //如果想要定义一个全包可见的类,必须加public,所以接口名必须和class文件名相同 *        * } *  * } * */public class FactoryPattern {    public static void main(String args[]){        //多态的返回值类型应用  接口可以成为类型 类名调用静态方法实现对象创建        Car a = Factory.getString("aaaa");        if(a != null){            System.out.println(a.getName());        }//预测结果:aaa        Car b = Factory.getString("Bentley");        if(b != null){            System.out.println(b.getName());        }//预测结果:Bentley    }}/* * 运行结果: * 该工厂不能生产aaaa类型的实例    Bentley *  * */