" );
String sql = "SELECT * FROM WHERE = ?";
prep = conn.prepareStatement( sql );
prep.setString( 1, "" );
rset = prep.executeQuery();
if( rset.next() ) {
System.out.println( rset.getString( "也非常方便,比如从 Mysql 数据库换到 Oracle
数据库,只要更换 facade接口中的 driver 就可以.
我们做成了一个 Facade 接口,使用该接口,上例中的程序就可以更改如下:
public class DBCompare {
String sql = "SELECT * FROM WHERE = ?";
try {
Mysql msql=new mysql(sql);
prep.setString( 1, "" );
rset = prep.executeQuery();
if( rset.next() ) { System.out.println( rset.getString( "情况,应该比较容易理解。
现在我们先要定义这个组合体:
abstract class CompositeEquipment extends Equipment
{
private int i=0;
//定义一个 Vector 用来存放'儿子'
private Lsit equipment=new ArrayList();
public CompositeEquipment(String name) { super(name); }
public boolean add(Equipment equipment) {
this.equipment.add(equipment);
return true;
}
public double netPrice()
{
double netPrice=0.;
Iterator iter=equipment.iterator();
for(iter.hasNext())
netPrice+=((Equipment)iter.next()).netPrice();
return netPrice;
}
public double discountPrice()
{
double discountPrice=0.;
Iterator iter=equipment.iterator(); for(iter.hasNext())
discountPrice+=((Equipment)iter.next()).discountPrice();
return discountPrice;
}
//注意这里,这里就提供用于访问自己组合体内的部件方法。
//上面 dIsk 之所以没有,是因为 Disk 是个单独(Primitive)的元素.
public Iterator iter()
{
return equipment.iterator() ;
{
//重载 Iterator 方法
public boolean hasNext() { return i会发现,上面调用类似我们读取文件时的调用:
FileReader fr = new FileReader(filename);
BufferedReader br = new BufferedReader(fr);
实际上 Java 的 I/O API 就是使用 Decorator 实现的,I/O变种很多,如果都采取继承方法,将会产生很多子类,显然相当繁琐.
Jive 中的 Decorator 实现
在论坛系统中,有些特别的字是不能出现在论坛中如"打倒 XXX",我们需要过滤这些"反动"的字体.不让他们出现或者高亮度显
示.
在 IBM Java 专栏中专门谈 Jive的文章中,有谈及 Jive中 ForumMessageFilter.java 使用了 Decorator 模式,其实,该程序并
没有真正使用 Decorator,而是提示说:针对特别论坛可以设计额外增加的过滤功能,那么就可以重组 ForumMessageFilter 作
为 Decorator 模式了.
所以,我们在分辨是否真正是Decorator模式,以及会真正使用Decorator模式,一定要把握好Decorator模式的定义,以及其中
参与的角色(Decoratee 和 Decorator).
设计模式之 Bridge
Bridge 模式定义 :将抽象和行为划分开来,各自独立,但能动态的结合。
任何事物对象都有抽象和行为之分,例如人,人是一种抽象,人分男人和女人等;人有行为,行为也有各种具体表现,所
以,“人”与“人的行为”两个概念也反映了抽象和行为之分。
在面向对象设计的基本概念中,对象这个概念实际是由属性和行为两个部分组成的,属性我们可以认为是一种静止的,是
一种抽象,一般情况下,行为是包含在一个对象中,但是,在有的情况下,我们需要将这些行为也进行归类,形成一个总的行
为接口,这就是桥模式的用处。
为什么使用?
不希望抽象部分和行为有一种固定的绑定关系,而是应该可以动态联系的。
如果一个抽象类或接口有多个具体实现(子类、concrete subclass),这些子类之间关系可能有以下两种情况:
1. 这多个子类之间概念是并列的,如前面举例,打桩,有两个 concrete class:方形桩和圆形桩;这两个形状上的桩是并列的,
没有概念上的重复。
2.这多个子类之中有内容概念上重叠.那么需要我们把抽象共同部分和行为共同部分各自独立开来,原来是准备放在一个接
口里,现在需要设计两个接口:抽象接口和行为接口,分别放置抽象和行为.
例如,一杯咖啡为例,子类实现类为四个:中杯加奶、大杯加奶、 中杯不加奶、大杯不加奶。
但是,我们注意到:上面四个子类中有概念重叠,可从另外一个角度进行考虑,这四个类实际是两个角色的组合:抽象 和
行为,其中抽象为:中杯和大杯;行为为:加奶 不加奶(如加橙汁 加苹果汁). 实现四个子类在抽象和行为之间发生了固定的绑定关系,如果以后动态增加加葡萄汁的行为,就必须再增加两个类:中杯
加葡萄汁和大杯加葡萄汁。显然混乱,扩展性极差。
那我们从分离抽象和行为的角度,使用 Bridge模式来实现。
如何实现? php Tsocket read 0,thrift 返回 TSocket read 0 bytes 求助!!!! 关键代码(服务器1 start_server.py):# Server 端对中文字段处理if isinstance(value, unicode):value = value.encode("utf8")setattr(tobj, k, value)关键代码(服务器2 start_server.py):# Server 端对中文字段处理if isinstance(value, unicode):p... TowardsDataScience 博客中文翻译 2019(二百一十) 与 k-means 不同,高斯混合模型考虑了方差并返回数据点属于每个K聚类的概率。一个高斯混合是一个由几个高斯组成的函数,每个高斯由k∈ {1,…,K}标识,其中K是我们数据集的聚类数。定义其中心的平均值μ。定义其宽度的协方差σ。这相当于多变量场景中椭球体的维度。定义高斯函数大小的混合概率π。现在让我们用图表来说明这些参数:在这里,我们可以看到有三个高斯函数,因此K= 3。每个高斯解释了三个可用分类中包含的数据。 php Tsocket read 0,thrift 返回 TSocket read 0 bytes 求助!!!!汗血宝马 关键代码(服务器1 start_server.py):# Server 端对中文字段处理if isinstance(value, unicode):value = value.encode("utf8")setattr(tobj, k, value)关键代码(服务器2 start_server.py):# Server 端对中文字段处理if isinstance(value, unicode):p... php thrift tsocket timeout,thrift 返回 TSocket read 0 bytes 求助!!!!汗血宝马 关键代码(服务器1 start_server.py):# Server 端对中文字段处理if isinstance(value, unicode):value = value.encode("utf8")setattr(tobj, k, value)关键代码(服务器2 start_server.py):# Server 端对中文字段处理if isinstance(value, unicode):p...
Java EE
67,542
社区成员
225,854
社区内容
发帖 与我相关 我的任务 Java EE J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。 复制链接
扫一扫 分享 确定 社区描述 J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。 社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告 试试用AI创作助手写篇文章吧
+ 用AI写文章