1. 程式人生 > >Thinking in Java:第十章-內部類

Thinking in Java:第十章-內部類

/**
 * Created by ivalue on 2017/12/21.
 */

// p209
public class GreenHouseController extends Controller {

    private boolean light = false;

    public class LightOn extends Event {
        public LightOn(long delayTime) {
            super(delayTime);
        }
        public void action() {
            light = true;
        }

        @Override
        public String toString() {
            return "light is on";
        }
    }

    public class LightOff extends Event {
        public LightOff(long delayTime) {
            super(delayTime);
        }
        public void action() {
            light = false;
        }
        @Override
        public String toString() {
            return "light is off";
        }
    }

    private boolean water = false;

    public class WaterOn extends Event {
        public WaterOn(long delayTime) {
            super(delayTime);
        }
        public void action() {
            water = true;
        }

        @Override
        public String toString() {
            return "water is on";
        }
    }

    public class WaterOff extends Event {
        public WaterOff(long delayTime) {
            super(delayTime);
        }
        public void action() {
            water = false;
        }

        @Override
        public String toString() {
            return "water is off";
        }
    }


    public class Restart extends Event {

        private Event[] eventList;

        public Restart (long delayTime, Event[] eventList) {
            super(delayTime);
            this.eventList = eventList;
            for (Event e :  eventList) {
                addEvent(e);
            }
        }

        public void action() {
            for (Event e : eventList) {
                e.start();
                addEvent(e);
            }
            start();
            addEvent(this);
        }

        @Override
        public String toString() {
            return "restart is on";
        }
    }

    public static void main(String[] args) {

        GreenHouseController gc = new GreenHouseController();

        //gc.addEvent(gc.new LightOn(200));

        Event[] eventList = {
                gc.new LightOn(200),
                gc.new LightOff(500),
                gc.new WaterOn(800),
                gc.new WaterOff(1200)
        };

        gc.addEvent(gc.new Restart(2000, eventList));

        gc.run();
    }
}

這是一個簡單的命令設計模式,Restart事件反覆執行,而且每次都會將eventList 載入到GreenHouseController物件中。

相關推薦

Thinking in Java-部類

/** * Created by ivalue on 2017/12/21. */ // p209 public class GreenHouseController extends Controller { private boolean light = false; public

Thinking in Java 部類

可以將一個類的定義放在另一個類的定義內部,這就是內部類 內部類與組合是完全不同的概念。 內部類看起來像是一種程式碼隱藏機制,但是它還了解外圍類,並能與之通訊; 更優雅!!! 建立內部類 很簡單——把類的定義置於外圍類的裡面: public class A {

[隨筆][Java][讀書筆記][thinking in java][ 部類]

10.6 效果 getc tps 啟動 implement bool 多個 tina 可以將一個類定義在另一個類的內部,這就是內部類。 10.1 創建內部類 public class Parcell { class Contents { priv

Thinking in Java——-部類

本文是對《Thinking in Java》第十章內容的整理。書中有些地方略顯晦澀,我加上了自己淺薄的理解。 文章結構 1、介紹了建立 內部類以及內部類的普遍特性 2、介紹了局部內部類、匿名內部類

JAVA-初步認識--部類-局部內部類

png 方法 image cnblogs -s 只有一個 外部類 理解 輸出 一. 繼續將之前的例子深化一下。現在要講述的是內部類除了放置在成員上,還能放置在局部上。換句話說,就是哪都能放。 這裏局部位置是指哪兒? 繼續將程序補全,截圖如下: 上面的截圖其實交代了內部

Java編程思想》筆記 部類

處理 this 都是 多層 不能 RM 互訪 4.2 引用調用 1.創建內部類對象 1.1 創建內部類對象(相當於new內部類對象) 外圍類對象.new 內部類( )。 1.2 創建內部類對象一種方法是 外圍類有一個方法返回內部類對象。 1.3 沒有外圍類對象就不能創建內部

java程式設計思想——(部類)》

內部類 可以將一個類的定義放在另一個類的定義內部,這就是內部類。 10.1 建立內部類 把類的定義置於外圍類的裡面。 /** * 建立內部類 * @author Administrator */ public class Parcel1 { class Co

Thinking in Java 介面

介面和內部類為我們提供了一種將介面與實現分離的更加結構化的方式 抽象類和抽象方法 抽象方法:僅有宣告而沒有方法體。 下面是抽象方法語法: abstract void f(); 包含抽象方法的類叫做抽象類。如果一個類包含一個或多個抽象方法,該類必須被限定為抽象

java程式設計思想讀書筆記---- 部類

1、建立內部類   將類的定義置於外部類的裡面,在外部類中可以直接new一個內部類的事例,通常外部類會有一個方法,該方法會返回一個指向內部類的引用。如果從外部類非靜態方法之外的位置其它類建立某個內部類的物件,必須具體的指明這個物件的型別:OutClassNam

部類 部類的作用、閉包、部類繼承、覆蓋重寫部類、區域性部類部類識別符號

1.為什麼需要內部類 內部類繼承自某個類或者實現某個介面,內部類可以訪問建立它的外部類的物件或引數資源。內部類能獨立的實現某個介面,無論外圍類是否實現了這個介面。內部類使多重繼承的解決方案變得更加完善。 下面的程式碼體現內部類實現多重繼承,實現多個介面interface A

部類 部類和巢狀類

1.內部類訪問外圍類的成員方法 內部類可以訪問其外圍類的方法和欄位,就像他們自己的一樣。當某個外圍類的物件建立一個內部類物件時,此內部類物件必定會祕密地捕獲一個指向那個外圍類物件的引用。 在訪問此外圍類成員的時候,就用那個引用去訪問外圍類的成員,內部類物件只能在與其外圍類的

Thinking in Java四版)—— 第二 一切皆對象

ati 靜態 數據類型 thinking short str 變量 屬於 字符 一.對象保存的位置 寄存器(cpu) 棧(變量) 堆(對象) 靜態域(static) 常量池(string) 非內存區池 二.基本數據類型 整數型 byte short int

android,後臺的默默勞動者——服務,學習筆記

nts height border 之間 默認 方便 第八章 ssa 重寫 一、多線程1)本章首先介紹了安卓的多線程編程,說明在子線程中如果要修改UI,必須通過Handler, Message, MessageQueue, Looper來實現,但是這樣畢竟太麻煩了。 2)然

java

ring 繼續 sys int can 循環 span score 平臺 第七章 循環的強化練習 public static void main(String[] args) { Scanner input = new Scanner(System.in

java

插入 bound tex print class 循環 tail pre 數據 第八章 數組 1.數組的聲明定義 數據類型[]變量名 = new 數據類型[長度]; 列:int[]ary = new int[5];

Java程式設計思想》10 部類

書中原始碼:https://github.com/yangxian1229/ThinkingInJava_SourceCode 可以將一個類的定義放在另一個類的定義內部,這就是內部類。 內部類與組合是完全不同的概念。 10.1 建立內部類 把類的定義置於外圍類的裡面。更典型的情況是,

201711671223《Java程式設計》八週學習總結 7部類與異常類

《Java程式設計》第八週學習總結 第7章內部類與異常類 教材內容學習總結 Java提供用於開發桌面程式的API,這些API在javax.swing包中。圖形使用者介面(GUI),Java的java.awt包,即Java抽象視窗工具包(AWT)提供了許多設計GUI的元件類。容器類(Conta

高等數學 曲線積分與曲面積分(1)對弧長、座標的曲線積分,格林公式及其應用

§10.1  對弧長的曲線積分 一、概念的引進 假設面內有一段曲線弧具有質量,在上任一點處的線密度為,且在上連續,與分別是弧的端點,現計算弧的質量。 在上任意地插入個分點 將分劃成個小弧段。對於第  個小弧段,由於線密度函式在上連續,當該小弧段的長度充分小時,它的質量近

java 部類與異常類

1. java支援在一個類中定義另一個類,這樣的類稱作內部類。而包含內部類的類被成為內部類的外嵌類。 2.內部類與外嵌類的重要關係:(1)內部類的外嵌類的成員變數在內部類中仍然有效,內部類中的方法也可以呼叫外嵌類中的方法;(2)內部類的類體中不可以宣告類變數和類方法。外嵌類

java程式設計思想 10 部類

將一個類的定義放在另一類的定義內部,這就是內部類 一、 建立內部類 把內部類的定義置於外圍類的裡面: //: innerclasses/Parcel1.java // Creating inner classes. public class Pa