一.狀態模式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()); } }