乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      20. 合成模式

       黎可圖書館 2013-09-15
      一. 定義
      Composite(組合模式):將對象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)。它使得客戶對單個對象和復合對象的使用具有一致性。

      二. 角色
      抽象構(gòu)件(Component)角色:這是一個抽象角色,它給參加組合的對象規(guī)定一個接口。
      樹葉構(gòu)件(Leaf)角色:代表參加組合的樹葉對象。
      樹枝構(gòu)件(Composite)對象:代表參加組合的有子對象的對象。

      三. 實現(xiàn)
      這里舉個數(shù)學計算的例子,比如1+1是一個簡單算法,而1*(2+3)就是一個簡單算法加上一個復雜算法。即1是葉子角色,2+3是樹枝構(gòu)件角色。

      Test.java
      public class Test {
      public static void main(String[] args) {
      MultipleOperation m1 = new MultipleOperation("+");
      SimpleOperation s1 = new SimpleOperation(12);
      SimpleOperation s2 = new SimpleOperation(2);
      m1.addOperate(s1);
      m1.addOperate(s2);
      MultipleOperation m2 = new MultipleOperation("*");
      SimpleOperation s3 = new SimpleOperation(3);
      m2.addOperate(s3);
      m2.addOperate(m1);
      System.out.println(m2.calculate());
      }
      }
      這里模擬了(12+2)*3的計算。

      Calculate.java
      public abstract class Calculate {
      protected Calculate next;
      public abstract double cal(String oper, double num1, double num2);
      }
      這里運用到了責任鏈模式,這個是責任接口。

      AddCalculate.java
      public class AddCalculate extends Calculate {

      @Override
      public double cal(String oper, double num1, double num2) {
      if(oper.equals("+")){
      return num1 + num2;
      }else{
      return super.next.cal(oper, num1, num2);
      }
      }

      }
      加法運算,減法和乘除都一樣,這里省略。

      CalculateChain
      public class CalculateChain {
      private List<Calculate> calculates;

      public CalculateChain(List<Calculate> calculates) {
      super();
      this.calculates = calculates;
      }
      private void sort(){
      for(int i=0; i< this.calculates.size(); i++){
      if(i == this.calculates.size() -1 ){
      return;
      }
      this.calculates.get(i).next = this.calculates.get(i+1);
      }
      }
      public double calculate(String oper, double num1, double num2){
      this.sort();
      return this.calculates.get(0).cal(oper, num1, num2);
      }

      }
      負責將各個算法穿起來的操作。

      Operation.java
      public interface Operation {
      public void addOperate(Operation operation);
      public void removeOperate(Operation operation);
      public Iterator<Operation> getChild();
      public double calculate();
      }
      抽象構(gòu)件角色。

      SimpleOperation.java
      public class SimpleOperation implements Operation {
      private double number;
      public double getNumber() {
      return number;
      }

      public void setNumber(double number) {
      this.number = number;
      }

      public SimpleOperation(double number) {
      super();
      this.number = number;
      }

      @Override
      public void addOperate(Operation operation) {
      }

      @Override
      public void removeOperate(Operation operation) {
      }

      @Override
      public Iterator<Operation> getChild() {
      return null;
      }

      @Override
      public double calculate() {
      return this.number;
      }

      }
      葉子構(gòu)件角色。

      MultipleOperation.java
      public class MultipleOperation implements Operation {
      private Vector<Operation> operations = new Vector<Operation>();
      private String oper;
      public MultipleOperation(String oper) {
      super();
      this.oper = oper;
      }

      @Override
      public void addOperate(Operation operation) {
      if(this.operations.size() == 2){
      this.operations.remove(1);
      }
      this.operations.add(operation);
      }

      @Override
      public void removeOperate(Operation operation) {
      this.operations.remove(operation);
      }

      @Override
      public Iterator<Operation> getChild() {
      return this.operations.iterator();
      }

      @Override
      public double calculate() {
      double num1 = this.operations.get(0).calculate();
      double num2 = this.operations.get(1).calculate();
      List<Calculate> cals = new ArrayList<Calculate>();
      AddCalculate add = new AddCalculate();
      SubtractCalculate sub = new SubtractCalculate();
      MultiplyCalculate mul = new MultiplyCalculate();
      DivideCalculate divide = new DivideCalculate();
      cals.add(add);
      cals.add(sub);
      cals.add(mul);
      cals.add(divide);
      return new CalculateChain(cals).calculate(oper, num1, num2);
      }

      }
      樹枝構(gòu)件角色。



        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多