分离接口与实现,以实现替换实现时不必修改客户端。
<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 431.25pt; HEIGHT: 241.5pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:%5CDOCUME~1%5CADMINI~1%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.png"></imagedata></shape>
Abstraction(BusinessObject)
定义类的接口;
RefinedAbstraction(CustomerBusinessObject)
扩展接口;
Implementor(DataObject)
定义实现类的接口,这个接口可以不和Abstraction接口吻合,实际上会完全不同。实现类的接口提供基础的操作,而Abstraction定义基于基础操作的高层操作。
ConcreteImplementor(CustomersDataObject)
实现Implementor接口和定义它自己具体实现。
代码:
//Abstraction
public abstract class BusinessObject{
//Fields
private DataObject dataObject;
protected String group;
public BusinessObject(String group){
this.group=group;
}
public DataObject getDataObject(){
return dataObject;
}
public void setDataObject(DataObject value){
dataObject=value;
}
public void Next(){
dataObject.NextRecord();
}
public void Prior(){
dataObject.PriorRecord();
}
public void New(String name){
dataObject.NewRecord(name);
}
public void Delete(String name){
dataObject.DeleteRecord(name);
}
public void Show(){
dataObject.ShowRecord();
}
public void ShowAll(){
System.out.println(“Customer Group:”+group);
dataObject.ShowAllRecords();
}
}
//RefinedAbstraction
public class CustomerBusinessObject extends BusinessObject{
public CustomerBusinessObject(String group){
super(group);
}
public void ShowAll(){
System.out.println(“--------------------”);
super.ShowAll();
System.out.println(“--------------------“);
}
}
//Implementor
public interface DataObject{
public void NextRecord();
public void PriorRecord();
public void NewRecord(String name);
public void DeleteRecord(String name);
public void ShowRecord();
public void ShowAllRecords();
}
//ConcreteImplementor
package org.colimas.doxygen.qtools;
import java.util.*;
public class CustomersDataObject implements DataObject {
private ArrayList customers=new ArrayList();
private int current = 0;
public CustomersDataObject() {
// Loaded from a database
customers.add( "Jim Jones" );
customers.add( "Samual Jackson" );
customers.add( "Allen Good" );
customers.add( "Ann Stills" );
customers.add( "Lisa Giolani" );
}
public void NextRecord() {
if( current <= customers.size()-1)
current++;
}
public void PriorRecord() {
if( current > 0 )
current--;
}
public void NewRecord(String name) {
customers.add( name );
}
public void DeleteRecord(String name) {
customers.remove( name );
}
public void ShowRecord() {
System.out.println(customers.get(current).toString());
}
public void ShowAllRecords() {
for (int i=0;i<customers.size();i++)
System.out.println(customers.get(i).toString());
}
}
//Client
public class BusinessApp {
public static void main(String[] args) {
BusinessObject customers =
new CustomerBusinessObject("Chicago");
//Set ConcreteImplementor
customers.setDataObject(new CustomersDataObject());
//Exercise the bridge
customers.Show();
customers.Next();
customers.Show();
customers.Next();
customers.Show();
customers.New( "Henry Velasquez" );
customers.ShowAll();
}
}
Output
Jim Jones
Samual Jackson
Allen Good
------------------------
Customer Group: <city><place><code><span style="FONT-SIZE: 10pt; COLOR: white"><font size="1">Chicago</font></span></code></place></city>
Jim Jones
Samual Jackson
Allen Good
Ann Stills
Lisa Giolani
Henry Velasquez
------------------------
|
分享到:
相关推荐
移动公司吉比特光猫ZXHN G6611路由模式Router改桥接模式Bridge方法详细教程 在这篇教程中,我们将学习如何将移动公司吉比特光猫ZXHN G6611从路由模式(Router)改为桥接模式(Bridge)。这将允许用户使用光猫作为一个...
桥接模式(Bridge Pattern)是设计模式中的一种结构型模式,它主要解决的是在软件设计中,当抽象和实现之间存在紧密耦合时,如何使这两者能够独立地变化。这种模式通过引入一个抽象层来分离接口和实现,使得它们可以...
桥接模式(Bridge Pattern)是一种结构型设计模式,它的主要目的是将抽象部分与其实现部分解耦,使得它们可以独立地进行变化和发展。在C++编程中,这种模式的应用可以帮助我们构建灵活、可扩展的系统,尤其在面对...
桥接模式(Bridge Pattern)是一种结构型设计模式,它的主要目的是将抽象部分与实现部分分离,使得它们可以独立地进行变化。在软件工程中,这种分离有助于降低复杂性,提高代码的可维护性和可扩展性。桥接模式的核心...
首先,桥接模式(Bridge Pattern)的核心思想是“分离抽象与实现”。它通过建立一个抽象层和一个实现层的独立继承体系,使得抽象部分和实现部分可以独立变化,形成一种解耦的设计。在桥接模式中,抽象类引用实现类的...
桥接模式是设计模式中的一种结构型模式,其主要目的是为了分离抽象部分和实现部分,以便两者能够独立地进行变化。这种模式的核心理念是通过引入一个抽象层来封装多种可能的实现,使得抽象和实现之间形成一种“桥接”...
桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立进行变化。这种模式在软件工程中被广泛应用于处理组件之间的耦合问题,特别是当需要为同一抽象提供多种实现或者需要独立地改变它们时。 ...
下面我们将详细探讨桥接模式的概念、结构、优点以及在实际开发中的应用。 桥接模式的核心思想是“抽象”和“实现”的解耦,它通过引入一个抽象层来分离接口和实现,形成两个独立的继承体系。这样,即使在运行时也...
桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象部分与实现部分分离,使得两者可以独立地变化。这种模式常用于需要在多个维度上变化的场景,比如不同的形状和颜色,允许在不改变客户端代码的情况下增加新...
桥接模式是设计模式中的一种结构型模式,它旨在将抽象部分与实现部分解耦,使得它们可以独立地变化。这种模式将抽象类和它的实现类进行分离,通过一个抽象接口来连接它们,使得两者可以独立发展,增加了系统的灵活性...
桥接模式(Bridge Pattern)是面向对象设计中的一种结构型模式,它将抽象部分与实现部分分离,使得它们可以独立地进行变化。在C#编程中,桥接模式的应用能够帮助我们更好地解耦系统,提高代码的灵活性和可扩展性。 ...
桥接模式 Bridge:将抽象部分与他的实现部分分离,使他们都可以独立的变化合成/聚合复用原则: 尽量使用合成/聚合,尽量不要使用继承解释:什么叫抽象与他的实现分离,并不是说,让抽象类与其派生类分离,因为这就没有任何...
桥接模式(Bridge Pattern)是一种结构型设计模式,它旨在将抽象部分与其实现部分分离,使得它们可以独立地进行变化。在C#编程中,这种模式尤其有用,因为随着软件系统的复杂性增加,类的继承层次可能会变得难以管理...
创建型模式 (100%) 设计模式面面观(8):创建型模式总结 (100%) 设计模式面面观(9):适配器模式(Adapter Pattern)-结构型模式 (100%) 设计模式面面观(10):桥接模式(Bridge Pattern)-结构型模式 ...
桥接模式是一种设计模式,属于结构型模式,其主要目的是将抽象部分与实现部分分离,使得它们可以独立地进行变化。这种模式通过引入一个抽象化角色来实现抽象和实现的解耦,允许它们独立地扩展。在桥接模式中,抽象...
"ADSL 桥接模式和路由模式的区别" 在 ADSL 宽带接入方式中,桥接模式和路由模式是两种常见的工作模式。_bridge 模式是 ADSL ROUTER 的默认工作模式,主要用于单台电脑的接入,需要代理服务器或网关设备将局域网中的...
C#面向对象设计模式 Bridge 桥接模式 视频讲座下载
在桥接模式中,抽象类(Abstraction)不直接引用具体实现(Implementation),而是通过一个桥接类(Bridge)来引用,这样抽象部分与实现部分可以独立变化,提供了更大的灵活性。 首先,我们来看一下桥接模式的基本...
桥接模式是一种结构型设计模式,它的目的是将抽象化与实现化解耦,使得它们可以独立变化。这种模式主要用于处理当一个类存在两个或多个独立的变化的维度时的情况,例如,当一个类的抽象部分和实现部分可能发生变化,...
桥接模式(Bridge Pattern)是设计模式中结构型模式的一种,它的主要目的是将抽象部分与实现部分解耦,使得它们可以独立地进行变化。在Java编程中,这种模式的应用可以帮助我们构建更加灵活、可扩展的代码结构。 ...