<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 閱讀(552) 評論(0)  編輯  收藏


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


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 亚洲视频在线一区二区| 91情国产l精品国产亚洲区| 免费观看理论片毛片| 国产免费播放一区二区| 精品亚洲成a人片在线观看少妇 | 国产精品免费久久久久久久久| 亚洲视频国产精品| 午夜亚洲国产理论秋霞| 亚洲天堂中文资源| 亚洲国产精品自产在线播放| 亚洲 综合 国产 欧洲 丝袜| 无码国产精品一区二区免费式直播 | 亚洲中文字幕乱码AV波多JI| 亚洲午夜电影一区二区三区| 又爽又黄无遮挡高清免费视频| 男人进去女人爽免费视频国产| 免费国产污网站在线观看| 三年在线观看免费观看完整版中文| 亚洲午夜无码久久| 亚洲人成人网站18禁| 亚洲AV一区二区三区四区| 国产亚洲情侣久久精品| 一区二区三区在线免费观看视频| 亚洲午夜久久久精品电影院| 亚洲人成综合网站7777香蕉| 亚洲美国产亚洲AV| 思思久久99热免费精品6| www一区二区www免费| 嫩草成人永久免费观看| 无码国产精品一区二区免费式直播 | 国产裸模视频免费区无码| 国产国产人免费视频成69大陆| 亚洲国产电影av在线网址| 亚洲精品美女久久777777| 亚洲黄色免费观看| 亚洲AV无码一区二区三区电影| 亚洲天堂免费在线视频| 95老司机免费福利| 国产免费阿v精品视频网址| 最近2019免费中文字幕视频三| 无码人妻精品一二三区免费|