- 浏览: 203579 次
- 性别:
- 来自: 芜湖
文章分类
- 全部博客 (139)
- 软件 (0)
- Pattern (6)
- CSDN导入 (19)
- Struts (3)
- [网站分类]1.网站首页原创 (27)
- [网站分类]6.转载区 (4)
- Hibernate (10)
- Error (8)
- [网站分类]2.Java新手区 (20)
- Java (8)
- [网站分类]4.其他技术区 (10)
- Web (1)
- C++ (2)
- Algorithm (4)
- Linux (2)
- Skill (1)
- Tech (2)
- Note (2)
- [网站分类]3.非技术区 (1)
- Database (1)
- Winty (7)
- [网站分类]1.网站首页原创Java技术区(对首页文章的要求: 原创、高质量、经过认真思考并精心写作。BlogJava管理团队会对首页的文章进行管理。) (0)
最新评论
-
haohao-xuexi02:
很不错哦。
O'Reilly cos上传组件的使用(1/3) - 上传文件 -
yoin528:
useUnicode=true&charact ...
[原]向MySQL数据库插入Blob数据的问题 -
xiaoqing20:
下载来看看!呵呵
[原]Struts2类型转换 -
xiaoqing20:
[原]Struts2类型转换
[关键字]:java,design pattern,设计模式,《Java与模式》学习,Immutable Pattern,不变模式
[环境]:StarUML5.0 + JDK6
[作者]:Winty (wintys@gmail.com) http://www.blogjava.net/wintys/
[正文]:
运行结果:
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
[环境]:StarUML5.0 + JDK6
[作者]:Winty (wintys@gmail.com) http://www.blogjava.net/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;
}
}
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.blogjava.net/wintys
作者:Winty (wintys@gmail.com)
博客:http://www.blogjava.net/wintys
发表评论
-
[原]导出CodeHelp的数据
2009-03-16 17:05 859搬到blogjava总得发点原创的东西吧。 Code ... -
[原]使用Ant实现zip压缩解压功能
2009-03-19 13:17 1721[关键词]:ant,zip,unzip,Apache,压缩,解 ... -
[原]EL函数的使用
2009-04-03 21:29 1120[标题]:EL函数的使用 [时 ... -
[原]对Class.getMethod()的调用未经检查
2009-04-05 15:52 2365[标题]:对Class.getMethod()的调用未经检查 ... -
[原]JNI简单示例
2009-04-05 21:33 1039[标题]:JNI简单示例 [时 ... -
[原]简单工厂模式
2009-04-14 12:26 755[关键字]:java,设计模式,简单工厂,《java与模式》 ... -
[原]工厂模式
2009-04-14 12:32 734[关键字]:java,design pattern,设计模式, ... -
[原]抽象工厂模式
2009-04-14 19:25 759[关键字]:java,design pattern,设计模式, ... -
[原]方法返回值为数组的另一种表示方法
2009-04-25 22:28 977[时间]:2009-04-25 今天看到JDK的源代码 ... -
[原]SAX使用示例
2009-04-26 19:18 2053[标题]:[原]SAX使用示例 [时间]:2009-4-25 ... -
[原]责任链模式
2009-05-09 16:47 737[关键字]:java,design pattern,设计模式, ... -
[原]状态模式
2009-05-18 23:03 839[关键字]:java,design pattern,设计模式, ... -
[原]策略模式
2009-05-21 22:21 706[关键字]:java,design pattern,设计模式, ... -
[原]VC实现重启路由器
2009-05-29 23:36 2082[标题]:[原]VC实现重启路 ... -
[原]远程登录Windows Server 2003的当前会话
2009-06-01 11:19 2075[标题]:远程登录Windows Server 2003的当前 ... -
[原]Tomcat crossContext
2009-06-01 12:27 6103[标题]:Tomcat crossContext [时间]:2 ... -
[原]装饰模式1
2009-06-07 22:33 716[关键字]:java,design pattern,设计模式, ... -
[原]装饰模式3-Grep
2009-06-07 22:42 700[关键字]:java,design pattern,设计模式, ... -
[原]合成模式-透明的
2009-06-08 22:23 765[关键字]:java,design pattern,设计模式, ... -
[原]合成模式-安全的
2009-06-08 22:27 840[关键字]:java,design pattern,设计模式, ...
相关推荐
### 模式分类(原书第2版):核心知识点概览 #### 一、引言 本书《模式分类(原书第2版)》是一部关于模式识别的经典教材,主要探讨了统计模式识别和结构模式识别的基础理论及应用,并且在新版中增加了新的理论和方法...
学习和理解这些不变矩的计算方法和应用,对于进行图像分析和模式识别项目是非常有益的。例如,可以用于指纹识别、车牌识别、手写数字识别等场景。Matlab作为强大的科学计算工具,为研究和开发提供了便利的环境,使得...
原始模型模式: 原始模型模式 通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原 型对象的方法创建出更多同类型的对象。 原始模型模式允许动态的增加或减少产品类, 产品 类不需要非得有任何事先...
这种模式通常用于保持对象的原始类结构不变,同时增强其功能。HeadFirst 设计模式系列书籍以其生动有趣的插图和易懂的解释闻名,帮助读者深入理解各种设计模式。 在“HeadFirst 设计模式学习笔记3--装饰模式 Demo”...
代理模式的核心思想是为一个对象提供一个替代品或代表,这个替代品能够控制对原对象的访问,使得客户端代码可以通过代理对象与真实对象进行交互,而无需直接暴露真实对象的所有细节。这种设计模式在很多场景下都非常...
11. **装饰模式**:装饰类包装原类对象,添加新的行为或属性,同时保持原有接口不变,增强了类的功能。 12. **享元模式**:运用共享技术有效地支持大量细粒度的对象。享元模式可以大幅度减少内存中对象的数量,降低...
在C++中,装饰模式可以通过继承和组合来实现,保持原有类的接口不变。 9. 外观模式:提供一个统一的接口,用来访问子系统中的一组接口。C++中的外观模式可以帮助简化客户端与复杂系统之间的交互。 10. 适配器模式...
尽管原书中使用的是C++示例,但随着Java的普及和发展,越来越多的开发者倾向于使用Java来理解和实践设计模式。 #### Java设计模式特点 Java语言本身具备简洁性与面向对象特性,这使得Java成为学习和实践设计模式的...
### 程序设计模式实例分析 #### 备忘录模式 (Memento Pattern) ...这两种模式都体现了设计模式的核心思想——通过增加抽象层,将变化的部分与不变的部分分离,从而达到代码的可复用性和可维护性。
装饰者模式的核心思想是将一个对象包装在一个装饰器对象中,装饰器对象拥有与原对象相同的接口,这样就可以透明地对原对象进行增强,同时保持原有功能不变。 首先,我们需要定义一个基础装备类(BaseEquipment),...
在Java中,享元模式常用于节省内存,通过共享大量细粒度对象的不变部分来实现。 5. **访问者(Visitor)模式**:分离对象结构的操作与其执行操作。Java中,访问者模式可以用于在不改变对象结构的前提下,添加新的...
这个模式的核心思想是封装额外的功能,使得原有对象的功能得到扩展,同时保持原有接口的不变,从而实现对对象功能的透明化增强。 "大话西游之设计模式_从猴王学艺看Decorator"这篇文章将设计模式的概念与经典电影...
装饰器模式的本质是通过类的继承和实例化,构建出一个对象的“套娃”结构,每个装饰类都包含一个原对象的引用,这样就可以在保持原对象接口不变的前提下,叠加新的行为。这种模式的优势在于灵活性,因为它允许在运行...
代理模式是一种结构型设计模式,它给某一个对象提供一个代理,并由代理对象控制对原对象的引用。 **关键知识点**: - **基本概念**:提供一个代理来控制对一个对象的访问。 - **应用场景**:为了控制对某个对象的...
- **适用场景**:远程代理时,或者为了控制对一个对象的访问,给某一个对象提供一个代理,并由代理对象控制对原对象的引用时。 #### 四、行为型模式 行为型模式关注的是对象之间的通信,即类或对象如何交互以及...
代理模式的核心思想是为一个对象提供一个代理,并由代理对象控制对原对象的引用。在Java中,代理模式有静态代理和动态代理两种实现方式。 首先,我们来详细了解一下静态代理。在静态代理中,我们需要创建一个代理类...
3. **变暗模式**:选取基色和混合色中较暗的颜色作为结果色,比混合色亮的像素会被替换,而较暗的像素保持不变。 4. **正片叠底模式**:在每个颜色通道中,基色和混合色复合,产生较暗的结果色。黑色混合产生黑色,...
装饰模式是一种结构型设计模式,它允许在运行时动态地为对象添加新的行为或职责,同时保持对象的接口不变。这种模式在不修改原有代码的基础上,通过组合而非继承来扩展对象的功能,避免了类爆炸的问题。 装饰模式的...