接口(Interface)
使用:
- 接口中不能定义构造器,意味着不能实例化
- 通过类实现接口来使用implements
- 接口可以多继承,即C可以继承A,B。使用接口C需要实现A,B中的所有方法
public class interfaceTest(){ public static void main(String[] args){ sout(Flyable.MAX_SPEED); } } interface Flyable(){ //全局常量 public static final int MAX_SPEED = 7900; int MIN_SPEED = 1;//可以省略前面的 //抽象方法 public abstract void fly(); //可以省略 void stop; }
接口的具体使用
接口使用上满足多态性
public Class Test(){ psvm(){ Computer com = new Computer(); Flash flsh = new Flash(); com.transferData(flash);//可以用实现类 } } Class Computer{ public void transferData(USB usb){ usb.start(); usb.stop(); } interface USB(){ void start(); void stop(); } Class Flash implements USB(){ }//实现类
接口的应用
daili模式(静态daili)
Test{ psvm(){ Server server = new Server(); ProxyServer proxy = new ProxyServer(server); proxy.browsw(); } } interface NetWork(){ void browse(); } Class Server implements NetWork(){ @Override void browse(){ sout("真实的服务器访问网络"); } } //***类,并不是真的让他联网,联网的还是Server对象才行 Class ProxyServer implements NetWork(){ private NetWork work;//依赖 public ProxyServer(NetWork work){ this.work = work;//构造器方式注入 } public void check(){ sout("联网之前的检查工作"); } @Override void browse(){ check(); work.browse(); } }
动态***(daili)可以通过反射实现进行多个接口的***(daili)
工厂模式
简单工厂模式:缺点是如果增加新产品,不修改代码的话是无法扩展的,违反了开闭原则(对扩展开放,对修改关闭)
interface Car(){ void run(); } Class Audi implements Car{ public void run(){ sout("奥迪在跑"); } } Class Factory{ public static Car getCar(String type){ if ("奥迪".equals(type)) { return new Audi(); }else if ("比亚迪".equals(type)) { return new BYD(); }else{ return null; } } } Client2{ psvm(){ Car a = Factory.getCar("奥迪"); a.run(); } }
工厂方法
interface Car(){ void run(); } Class Audi implements Car{ public void run(){ sout("奥迪在跑"); } } interface Factory(){//工厂接口 Car getFactory(); } Class AudiFactory implements Factory{ Audi getCar(){ return new Audi; } } Class BYDFactory implements Factory{ Audi getCar(){ return new BYD(); } } Client2{ psvm(){ Car a = new AudiFactory.getCar(); a.run(); } }
抽象工厂
//在本实例中我们对代码进行了大量简化,实际使用时,界面组件的初始化代码较为复杂,还需要使用JDK中一些已有类,为了突出核心代码,在此只提供框架代码和演示输出。 //按钮接口:抽象产品 interface Button { public void display(); } //Spring按钮类:具体产品 class SpringButton implements Button { public void display() { System.out.println("显示浅绿色按钮。"); } } //Summer按钮类:具体产品 class SummerButton implements Button { public void display() { System.out.println("显示浅蓝色按钮。"); } } //文本框接口:抽象产品 interface TextField { public void display(); } //Spring文本框类:具体产品 class SpringTextField implements TextField { public void display() { System.out.println("显示绿色边框文本框。"); } } //Summer文本框类:具体产品 class SummerTextField implements TextField { public void display() { System.out.println("显示蓝色边框文本框。"); } } //组合框接口:抽象产品 interface ComboBox { public void display(); } //Spring组合框类:具体产品 class SpringComboBox implements ComboBox { public void display() { System.out.println("显示绿色边框组合框。"); } } //Summer组合框类:具体产品 class SummerComboBox implements ComboBox { public void display() { System.out.println("显示蓝色边框组合框。"); } } //界面皮肤工厂接口:抽象工厂 interface SkinFactory { public Button createButton(); public TextField createTextField(); public ComboBox createComboBox(); } //Spring皮肤工厂:具体工厂 class SpringSkinFactory implements SkinFactory { public Button createButton() { return new SpringButton(); } public TextField createTextField() { return new SpringTextField(); } public ComboBox createComboBox() { return new SpringComboBox(); } } //Summer皮肤工厂:具体工厂 class SummerSkinFactory implements SkinFactory { public Button createButton() { return new SummerButton(); } public TextField createTextField() { return new SummerTextField(); } public ComboBox createComboBox() { return new SummerComboBox(); } }