常用设计模式学习

来源:互联网 发布:安全狗防sql注入原理 编辑:程序博客网 时间:2024/06/09 22:53

一、建造模式:是将复杂的内部创建封装在内部,对于外部调用的人来说,只需要传入建造者和建造工具,对于内部是如何建造成成品的,调用者无需关心。

代码:

public interface Builder {     void buildPartA();     void buildPartB();     void buildPartC();       Product getResult();   }    //具体建造工具  public class ConcreteBuilder implements Builder {     Part partA, partB, partC;     public void buildPartA() {      //这里是具体如何构建partA的代码    };     public void buildPartB() {       //这里是具体如何构建partB的代码    };      public void buildPartC() {       //这里是具体如何构建partB的代码    };      public Product getResult() {       //返回最后组装成品结果    };   }   //建造者  public class Director {    private Builder builder;       public Director( Builder builder ) {       this.builder = builder;     }     public void construct() {       builder.buildPartA();      builder.buildPartB();      builder.buildPartC();     }   }   public interface Product { }  public interface Part { }
测试代码:

  下面是调用builder的方法:  ConcreteBuilder builder = new ConcreteBuilder();  Director director = new Director( builder );     director.construct();   Product product = builder.getResult();

二、Adapter(适配器模式):
定义:将两个不兼容的类纠合在一起使用,属于结构型模式,需要有Adaptee(被适配者)和Adaptor(适配器)两个身份.

例如:假设我们要打桩,有两种类:方形桩 圆形桩.

public class SquarePeg{   public void insert(String str){     System.out.println("SquarePeg insert():"+str);   } } public class RoundPeg{   public void insertIntohole(String msg){     System.out.println("RoundPeg insertIntoHole():"+msg); } }

如果我们需要两边继承,即继承SquarePeg 又继承RoundPeg,因为Java中不允许多继承,但是我们可以实现(implements)两个接口(interface) 

public interface IRoundPeg{   public void insertIntoHole(String msg);  } public interface ISquarePeg{   public void insert(String str); }
下面是新的RoundPeg 和SquarePeg, 除了实现接口这一区别,和上面的没什么区别。
public class SquarePeg implements ISquarePeg{   public void insert(String str){     System.out.println("SquarePeg insert():"+str);   } } public class RoundPeg implements IRoundPeg{   public void insertIntohole(String msg){     System.out.println("RoundPeg insertIntoHole():"+msg);   } }
下面是新的PegAdapter,叫做two-way adapter:

public class PegAdapter implements IRoundPeg,ISquarePeg{    private RoundPeg roundPeg;   private SquarePeg squarePeg;    // 构造方法   public PegAdapter(RoundPeg peg){this.roundPeg=peg;}   // 构造方法   public PegAdapter(SquarePeg peg)(this.squarePeg=peg;)   public void insert(String str){ roundPeg.insertIntoHole(str);} }





0 0