java抽象類與介面——設計模式
1、工廠模式
先看程式1:
package com.java.abs;
interface Fruit {// 定義一個介面水果
public void eat();
}
class Apple implements Fruit {
public void eat() {
System.out.println("吃蘋果");
}
}
class Orange implements Fruit {
public void eat() {
System.out.println("吃橘子");
}
}
public class InterfaceCaseDemo1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Fruit f = new Apple();// 例項化介面
f.eat();
}
分析程式碼:主方法應該表示一個客戶端,主方法的程式碼越少越好,此時,直接在主方法中指定了解要操作的子類,如果要更換子類,就要修改客戶端,就表示跟特定的子類緊密耦合在一起了。
JVM的工作原理:程式→JVM→作業系統
圖1
此過渡段就稱為工廠設計
改進後的程式
package com.java.abs;
interface Fruit {// 定義一個介面水果
public void eat();
}
class Apple implements Fruit {
public void eat() {
System.out.println("吃蘋果");
}
}
class Orange implements Fruit {
public void eat() {
System.out.println("吃橘子");
}
}
class Factory {// 定義工廠類
public static Fruit getInstance(String className) {
Fruit f = null;
if ("Apple".equalsIgnoreCase(className)) {
/*
* 一般字串比較,不寫成className.equalsIgnoreCase("Apple")
* 因為className為空時,空的物件無法呼叫方法,即產生空指標異常!
*/
f = new Apple();
}
if ("Orange".equalsIgnoreCase(className)) {
f = new Orange();
}
return f;
}
}
public class InterfaceCaseDemo1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Fruit f = Factory.getInstance(args[0]);// 例項化介面args[0]通過初始化引數設定。在dos下執行才可以設定
if (f != null) {
f.eat();
}
}
}
2、代理模式
package com.java.abs;
interface Network {
public void browse();
}
class Real implements Network {
public void browse() {
System.out.println("上網瀏覽資訊");
}
}
class Proxy implements Network {
private Network network;// 代理物件
public Proxy(Network network) {
this.network = network;
}
public void check() {
System.out.println("檢查使用者身份是否合法");
}
public void browse() {
this.check();
this.network.browse();// 呼叫真是的主題操作
}
}
public class InterfaceCaseDemo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Network net = null;
net = new Proxy(new Real());// 制定代理操作 構造方法的引數是 new Real
net.browse();
}
}
圖2
3、介面卡模式(多用於java圖形化介面)
對於java程式來說:如果要實現一個介面,則肯定要覆寫介面中的全部抽象方法,那麼如果,介面中方法太多,但是子類有用不到那麼多的抽象方法,則很麻煩,此時需要一箇中間過渡,但是此過渡類有不希望被直接使用,所以將此過渡類定義成抽象類比較合適,即一個介面首先被一個抽象類(稱作介面卡類),並在此抽象類中實現若方法(方法體為空),則以後的子類直接繼承此抽象類,就可以有選擇的覆寫所需要的方法了。
圖3
package com.java.extend;
interface Windows {
public void open();
public void close();
public void activated();
public void iconified();
public void deiconified();
}
abstract class WindowAdapter {
public void open() {
}
public void close() {
}
public void activated() {
}
public void iconified() {
}
public void deiconified() {
}
}
class WindowsImpl extends WindowAdapter {
public void open() {
System.out.println("開啟視窗");
}
public void close() {
System.out.println("關閉視窗");
}
}
public class AdapterDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
WindowsImpl wd = new WindowsImpl();
wd.open();
wd.close();
}
}
抽象類與介面雜談——內部類的擴充套件
在一個抽象類中定義一個介面,用內部類來繼承並實現內部介面。反之,在一個介面中也可以定義一個抽象類程式2,但是實際中並不常見!
程式1:
package com.java.extend;
abstract class A2 {
public abstract void printA();
interface B {
public void printB();
}
}
class X extends A2 {
public void printA() {
System.out.println("列印A1");
}
class Y implements B {
public void printB() {
System.out.println("列印B");
}
}
}
public class InnerExtend extends X {
public static void main(String args[]) {
A2.B b = new X().new Y();
b.printB();
}
}
程式2
package com.java.extend;
interface AA {
public abstract void printA();
abstract class B {
public abstract void printB();
}
}
class X1 implements AA {
public void printA() {
System.out.println("列印A1");
}
class Y extends B {
public void printB() {
System.out.println("列印B");
}
}
}
public class InnerExtend2 extends X1 {
public static void main(String args[]) {
B b = new X1().new Y();
b.printB();
}
}
抽象類和介面的關係
介面和抽象類是使用普通子類,子類必須覆寫全部抽象方法,寫出方法體;
相關文章
- java 設計模式6原則 介面,抽象類區別Java設計模式抽象
- Java中的介面與抽象類設計原則Java抽象
- Java總結-抽象類與介面Java抽象
- java中的抽象類與介面Java抽象
- Java的抽象類與介面理解Java抽象
- Java抽象類與介面的區別Java抽象
- 抽象類與介面抽象
- 介面與抽象類抽象
- Java的抽象類 & 介面Java抽象
- Java中抽象類與介面的區別Java抽象
- Java中的介面與抽象類詳解Java抽象
- 設計模式-模版設計模式概述和使用-抽象類設計模式抽象
- java設計模式–抽象工廠模式Java設計模式抽象
- Java設計模式-抽象工廠模式Java設計模式抽象
- Java 設計模式之工廠方法模式與抽象工廠模式Java設計模式抽象
- java中抽象類和介面Java抽象
- Java:面試題:抽象類與介面的區別Java面試題抽象
- java抽象類與介面的詳細詮釋Java抽象
- Java 介面與抽象方法Java抽象
- Java抽象(方法,類)和Java的介面Java抽象
- Java基礎10 介面的繼承與抽象類Java繼承抽象
- Java常用設計模式之抽象工廠模式Java設計模式抽象
- Java基礎-抽象類和介面Java抽象
- JAVA介面繼承、抽象類等Java繼承抽象
- Java抽象類和介面 小白版Java抽象
- 從零開始的Java程式設計之抽象與介面Java程式設計抽象
- JAVA設計模式 3【建立型】理解工廠模式與抽象工廠模式Java設計模式抽象
- Java設計模式學習筆記——工廠模式與抽象工廠模式Java設計模式筆記抽象
- Java 的抽象類, 介面以及內部類Java抽象
- 抽象類與介面的區別抽象
- Java基礎之介面與抽象類及多型、內部類Java抽象多型
- 一個插排引發的設計思想 (二) 抽象類與介面抽象
- Java集合為什麼設計為:實現類繼承了抽象類,同時實現抽象類實現的介面Java繼承抽象
- 設計模式:抽象工廠模式,結合類圖秒懂!設計模式抽象
- Java設計模式之介面卡設計模式Java設計模式
- java設計模式-介面卡模式Java設計模式
- 重學 Java 設計模式:實戰抽象工廠模式Java設計模式抽象
- java23種設計模式之抽象工廠模式Java設計模式抽象