設計模式之狀態模式/策略模式

一.狀態模式java

下面代碼中,Stage包含一個對Actor的引用,並被初始化爲一個HappyActor對象,在執行完change以後,actor又與SadActor進行了動態綁定,從而能夠產生不一樣的行爲,這就在運行期間得到了靈活性。這也稱做狀態模式app

public class NesttyMain {

    static class Actor{
        public void act(){}
    }

    static class HappyActor extends Actor{
        public void act(){
            System.out.println("HappyActor");
        }
    }


    static class SadActor extends Actor{
        public void act(){
            System.out.println("SadActor");
        }
    }
    
    static class Stage{
        private Actor actor = new HappyActor();

        public void change(){
            this.actor = new SadActor();
        }

        public void perform(){
            this.actor.act();
        }

    }

    public static void main(String[] args){

        Stage stage = new Stage();
        stage.perform();
        stage.change();
        stage.perform();
    }


}

二.策略模式this

以下面代碼,經過繼承同一個類,從新process方法,實現了兩個不一樣的處理器,一個用於將字母大寫,一個字母小寫,在使用時,經過使用不一樣的處理器來處理輸入的字符串。這種經過傳遞參數對象的不一樣而具備不一樣的行爲方法,叫作策略模式code

public class NesttyMain {

    static class Processor {
        public Object process(Object obj){
            return obj;
        }
    }

    static class UppercaseProcessor extends Processor {
        public String process(Object str){
            return ((String)str).toUpperCase();
        }
    }


    static class LowerCaseProcessor extends Processor {
        public String process(Object str){
            return ((String)str).toLowerCase();
        }
    }

    static class ProcessApply{


        public void process(Processor processor,Object obj){
            System.out.println(processor.process(obj));
        }

    }

    public static void main(String[] args){

        ProcessApply pa = new ProcessApply();
        String str = "aZ";
        pa.process(new UppercaseProcessor(),str);
        pa.process(new LowerCaseProcessor(),str);
        System.out.println(str.toLowerCase());
        System.out.println(str.toUpperCase());
    }


}
相關文章
相關標籤/搜索