Java綠地(~ming~)

          Java 草地

          常用鏈接

          統計

          最新評論

          軟件構架的精髓:設計模式(Design Partern)

          Design Partern設計模式

          .設計模式原則:a.開閉原則(對擴展開放,修改關閉);
                         b.
          組合聚合復用原則(組合可選用功能)

            
                         c.
          接口隔離原則(防止接口過肥);
                         d.law of Remeter(
          抵米特法則,通過中間件對外訪問);

           
                         e.
          依賴倒轉原則(依賴接口);
                         f:the substitution of Lee(
          多態,向上轉型以父類出現);





          .主要模式:a.簡單工廠模式:主要利用抽象類可以很好的實現開閉原則.種類改變情況:

          : 1.public abstract class FruitFactory { public abstract Fruit creatFruit(); }

          2.public class AppleFactory extends FruitFactory {

                public Fruit creatFruit() {  return  new Apple(); }  } //李式替代原則,向上轉型

          3. public abstract class Fruit {    public void display() { }  }

          4. public class Apple extends Fruit {  public void display() {

                  System.out.println("this is apple");    }  }

          5.對外訪問: public class Client {

                public static void main(String args[]) { FruitFactory ff=new AppleFactory();

                  Fruit apple=ff.creatFruit();        apple.display(); } } //向下轉型

          b.工廠模式2(抽象工廠,種類不變,但分組改變的情況):

          : 1.public abstract class Factory {

                public abstract Desk creatDesk(); public abstract Chair creatChair();  }

              2. public class GlassFactory extends Factory {

                public Desk creatDesk() { return new GlassDesk(); }

                public Chair creatChair() {  return new GlassChair();    }  }

          3. public abstract class Chair {    public abstract void display(); }

          4. public class GlassChair extends Chair {

                 public void display() {  System.out.println("this is glassChair!"); }}

          5.測試: public class Client {   public static void main(String args[]) {

                  Factory fc=new GlassFactory();  Chair glasschair=fc.creatChair();

                  glasschair.display(); } }    //向下轉型,以父類的名義調用所有方法

           

          成員變量為static的時候立即開辟空間,但static方法在調用時才開辟空間,稱緩式初始化

           

          c.單例模式:只產生一個實例連接:特點:a.實例保存在一個static成員變量里面

             b.構造方法是private,在外類不可new;c.通過static方法返回單例實例.

             區別:a.餓汗模式在成員變量聲明時即對單例初始化

                 b.懶漢式在獲取實例的static方法中才對單例初始化,并對方法加synchronized

          .a.public class Singleton { 

                  private static Singleton instance=new Singleton();

                  private Singleton(){   }         //只留一個getInstance接口

              public static Singleton getInstance(){       return instance;    } }

             b. public class SingletonLazy {  //方法是個動作,可同時改變值,但static變量是空間

                  private static SingletonLazy instance;   private SingletonLazy(){    }

                public synchronized static SingletonLazy getInstance(){

                  if(instance==null)  instance=new SingletonLazy();  return instance;    }}

          在外類中只可以通過如下調用:   Singleton s=Singleton.getInstance();

           

          d.適配器模式:

          .類適配器:1. public interface Target {

                          public void operator1();      public void operator2(); }

          2.public class Adeptee {

              public void operator1(){    System.out.println("this is Adeptee function");} }

          3. public class Adepter extends Adeptee implements Target {//將所有方法放在適配器中

              public void operator2() {   System.out.println("this is new function"); }}



          .對象適配器public class Adepter2 implements Target {

                    private Adeptee adeptee; //通過組合思想,用有參構造方法

                    public Adepter2(Adeptee adeptee){   this.adeptee=adeptee;      }

                       public void operator1(){     adeptee.operator1();   }

                       public void operator2(){      System.out.println("tagert function!");}}

          e.裝飾模式



          類:1public abstract class Phone {   public abstract void call();   }

          2public class NomalPhone extends Phone { //在不影響原有功能的基礎上進行擴展

              public void call() {    System.out.println("nomal phone!"); }}

           

          3public abstract class PhoneDecorator extends Phone { protected Phone phone;  

              public PhoneDecorator(Phone phone){     this.phone=phone;   }

              public void call() {    } }

          4. public class Mp3Phone extends PhoneDecorator {

              public Mp3Phone(Phone phone) { super(phone); }   //子類一定要先對父類初始化

              private void mp3Phone(){        System.out.println("this is mp3phone!");    }

              public void call() {        phone.call( );        mp3Phone(); }}

           

          5.測試:public class Client {   public static void main(String args[]){

                  Phone mp3phone=new Mp3Phone(new NomalPhone());      mp3phone.call();

                  Phone allphone=new Mp3Phone(new PhotoPhone(new NomalPhone()));

          allphone.call();}} (Photo.phone參數àDecoratoràPhoto.callàphone.call()àmp3.call)

           

          備注:super只是用來初始化父類的構造方法,多態的方式是通過new得到身份的,與其他無關

           

           

           

           

          f.命令模式:




          類:1.public class ControlPanel {   //命令傳遞者

              private Command onComm;

              public ControlPanel(Command onComm) {       this.onComm=onComm; }

              public void on() {  onComm.handle(); }}

          2. public abstract class Command { protected Television tv;  //命令

              public Command(Television tv){     this.tv=tv; }

              public abstract void handle( );  }

          3. public class TurnOn extends Command { 

              public TurnOn(Television tv) {      super(tv);      }

              public void handle() {      tv.open();  }}

          4. public class Television{ public void open(){System.out.println("open!"); }//執行

           

          5.調用:public class Client {   public static void main(String args[]){

          Television tv=new Television();

          ControlPanel cp=new ControlPanel(new TurnOn(tv));       cp.on();  } }

          posted on 2007-08-03 17:45 mrklmxy 閱讀(555) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 南开区| 新泰市| 万宁市| 尚志市| 贵定县| 邯郸县| 丰原市| 察雅县| 剑河县| 怀宁县| 庄河市| 荥经县| 绵阳市| 泰来县| 桐乡市| 聂拉木县| 阿坝县| 遵化市| 鹤壁市| 满城县| 改则县| 通辽市| 金门县| 东乡族自治县| 康乐县| 长岭县| 林州市| 冷水江市| 通渭县| 五家渠市| 启东市| 肥西县| 林州市| 广丰县| 通许县| 康平县| 正镶白旗| 海晏县| 登封市| 泰宁县| 台湾省|