隨筆 - 117  文章 - 72  trackbacks - 0

          聲明:原創作品(標有[原]字樣)轉載時請注明出處,謝謝。

          常用鏈接

          常用設置
          常用軟件
          常用命令
           

          訂閱

          訂閱

          留言簿(7)

          隨筆分類(130)

          隨筆檔案(123)

          搜索

          •  

          積分與排名

          • 積分 - 156399
          • 排名 - 390

          最新評論

          [關鍵字]:java,design pattern,設計模式,《Java與模式》學習,Immutable Pattern,不變模式
          [環境]:StarUML5.0 + JDK6
          [作者]:Winty (wintys@gmail.com) http://www.aygfsteel.com/wintys/
          [正文]:

          package pattern.immutable;
          import java.text.NumberFormat;

          /**
           * 不變模式:Immutable Pattern
           *
           * 復數的四則運算
           * @version 2009-6-15
           * @author Winty(wintys@gmail.com)
           */
          public class ImmutableTest{
              public static void main(String[] args){
                  Complex a , b , c , d , e , f , g;
                  a = new Complex(0 , 2);
                  b = new Complex(3 , -5);

                  c = a.add(b);
                  d = a.sub(b);
                  e = a.mul(b);
                  f = a.div(b);
                  g = a.add(Complex.i);

                  System.out.println("a="+a);
                  System.out.println("b="+b);
                  System.out.println("i="+Complex.i);
                  System.out.println("a+b="+c);
                  System.out.println("a-b="+d);
                  System.out.println("a*b="+e);
                  System.out.println("a/b="+f);
                  System.out.println("a+i="+g);        
              }
          }

          final class Complex extends Number{
              private double real;//實部
              private double imaginary;//虛部
              public static final Complex i;//虛數單位

              static{
                  i = new Complex(0 , 1);
              }

              public Complex(){
                  real = 0.0;
                  imaginary = 0.0;
              }

              public Complex(double real , double imaginary){
                  this.real = real;
                  this.imaginary = imaginary;
              }

              public double getReal(){
                  return real;
              }

              public double getImaginary(){
                  return imaginary;
              }

              /**
               * 復數相加
               */
              public Complex add(Complex c){
                  return new Complex(real + c.getReal() ,
                                              imaginary + c.getImaginary());
              }

              /**
               * 復數相減
               */
              public Complex sub(Complex c){
                  return new Complex(real - c.getReal() ,
                                              imaginary - c.getImaginary());
              }

              /**
               * 復數相乘:(a+bi)(c+di)=(ac-bd)+(ad+bc)i
               */
              public Complex mul(Complex c){
                  double r = c.getReal();
                  double i = c.getImaginary();
                  r = real*r - imaginary*i;
                  i = real*i + imaginary*r;

                  return new Complex(r , i);
              }

              /**
               * 復數除法:
               * (a+bi)(c+di) = (a*c + b*d)/(c*c+d*d) + (b*c - a*d)/(c*c+d*d)
               */
              public Complex div(Complex complex){
                  double a,b,c,d;
                  double denominator;
                  a = real;
                  b = imaginary;
                  c = complex.getReal();
                  d = complex.getImaginary();
                  denominator = c*c + d*d;

                  double r = (a*c + b*d)/denominator;
                  double i = (b*c - a*d)/denominator;

                  return new Complex(r , i);
              }

              public double abs(){
                  return Math.sqrt(real*real + imaginary*imaginary);
              }

              @Override
              public double doubleValue(){
                  return real;
              }

              @Override
              public float floatValue(){
                  return (float)real;
              }

              @Override
              public int intValue(){
                  return (int)real;
              }

              @Override
              public long longValue(){
                  return (long)real;
              }

              public String toString(){
                  NumberFormat f = NumberFormat.getNumberInstance();
                  f.setMaximumFractionDigits(2);
                  String strReal = f.format(real);
                  String strImaginary = f.format(imaginary);
                  String str = "";

                  String sign = "";
                  
                  if(real != 0){//實部不為0時才顯示實部
                      str = strReal;

                      if(imaginary > 0)
                          sign = "+";
                  }
                  str += sign + strImaginary + "*i";

                  return str;
              }
          }

          運行結果:
          a=2*i
          b=3-5*i
          i=1*i
          a+b=3-3*i
          a-b=-3+7*i
          a*b=10+20*i
          a/b=-0.29+0.18*i
          a+i=3*i
          原創作品,轉載請注明出處。
          作者:Winty (wintys@gmail.com)
          博客:http://www.aygfsteel.com/wintys
          posted on 2009-06-16 22:52 天堂露珠 閱讀(993) 評論(0)  編輯  收藏 所屬分類: Pattern
          主站蜘蛛池模板: 湾仔区| 宁明县| 阿拉善左旗| 和田县| 寿阳县| 怀集县| 杭锦旗| 大石桥市| 隆回县| 通渭县| 镇雄县| 白银市| 杭锦旗| 榆中县| 灵台县| 泸水县| 丹凤县| 增城市| 南京市| 呼伦贝尔市| 廊坊市| 浪卡子县| 辰溪县| 彭泽县| 叶城县| 光泽县| 巴青县| 临猗县| 兴业县| 新蔡县| 普格县| 隆林| 台前县| 平凉市| 抚州市| 金寨县| 长沙县| 漳浦县| 石狮市| 东辽县| 景谷|