//Abstraction抽象类,保持Implementor的引用 public abstract class Abstraction {
protected Implementor impl;
public void setImpl(Implementor impl){ this.impl = impl; } //抽象操作方法 public abstract void operation(); }
//Implementor 接口 public interface Implementor {
void operationImpl(); }
//Abstraction抽象类的具体实现 public class DefindAbstraction extends Abstraction { @Override public void operation() { impl.operationImpl(); } }
//Implementor 接口的具体实现 public class ConcreteImplementorA implements Implementor { @Override public void operationImpl() { System.out.println("this is ConcreteImplementorA operation!"); } }
//Implementor 接口的具体实现 public class ConcreteImplementorB implements Implementor { @Override public void operationImpl() { System.out.println("this is ConcreteImplementorB operation!"); } }
客户端调用代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
public class Client {
public static void main(String[] args) { Abstraction abstraction; Implementor implementor;
abstraction = new DefindAbstraction(); implementor = new ConcreteImplementorA(); abstraction.setImpl(implementor); abstraction.operation();
implementor = new ConcreteImplementorB(); abstraction.setImpl(implementor); abstraction.operation(); } }
调用结果
1 2
this is ConcreteImplementorA operation! this is ConcreteImplementorB operation!
public class TXTDataParser extends DataParser { @Override public void parseData() { String str = dpi.readData(); System.out.println("Parse "+str+" to TXT"); System.out.println("---------------------------------------"); } }
public class XMLDataParser extends DataParser { @Override public void parseData() { String str = dpi.readData(); System.out.println("Parse "+str+" to XML"); System.out.println("---------------------------------------"); } }
...
public class OracleDataProvider implements DataProviderImp {
@Override public String readData() { System.out.println("Connect DB ---- Oracle"); System.out.println("Read Data from Oracle"); return "Data from Oracle"; } }
public class MysqlDataProvider implements DataProviderImp { @Override public String readData() { System.out.println("Connect DB ---- Mysql"); System.out.println("Read Data from Mysql"); return "Data from Mysql"; } }
public static void main(String[] args){ DataParser dataParser; DataProviderImp dataProviderImp;
dataParser = new TXTDataParser(); dataProviderImp = new OracleDataProvider(); dataParser.setDpi(dataProviderImp); dataParser.parseData();
dataParser = new XMLDataParser(); dataProviderImp = new MysqlDataProvider(); dataParser.setDpi(dataProviderImp); dataParser.parseData();
dataParser = new PDFDataParser(); dataProviderImp = new SqlServerDataProvider(); dataParser.setDpi(dataProviderImp); dataParser.parseData(); } }
运行结果如下
1 2 3 4 5 6 7 8 9 10 11 12
Connect DB ---- Oracle Read Data from Oracle Parse Data from Oracle to TXT --------------------------------------- Connect DB ---- Mysql Read Data from Mysql Parse Data from Mysql to XML --------------------------------------- Connect DB ---- SqlServer Read Data from SqlServer Parse Data from SqlServer to PDF ---------------------------------------