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

代码:

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(适配器)两个身份.

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

publicclassSquarePeg{
publicvoidinsert(Stringstr){
System.out.println("SquarePeginsert():"+str);}}
publicclassRoundPeg{
publicvoidinsertIntohole(Stringmsg){
System.out.println("RoundPeginsertIntoHole():"+msg);}}

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

publicinterfaceIRoundPeg{
publicvoidinsertIntoHole(Stringmsg);}
publicinterfaceISquarePeg{
publicvoidinsert(Stringstr);}
下面是新的RoundPeg 和SquarePeg, 除了实现接口这一区别,和上面的没什么区别。
publicclassSquarePegimplementsISquarePeg{publicvoidinsert(Stringstr){
System.out.println("SquarePeginsert():"+str);}}
publicclassRoundPegimplementsIRoundPeg{publicvoidinsertIntohole(Stringmsg){
System.out.println("RoundPeginsertIntoHole():"+msg);}}
下面是新的PegAdapter,叫做two-way adapter:

publicclassPegAdapterimplementsIRoundPeg,ISquarePeg{
privateRoundPegroundPeg;privateSquarePegsquarePeg;
//构造方法
publicPegAdapter(RoundPegpeg){this.roundPeg=peg;}//构造方法
publicPegAdapter(SquarePegpeg)(this.squarePeg=peg;)
publicvoidinsert(Stringstr){roundPeg.insertIntoHole(str);}}





更多相关文章

  1. java 和 C 代码运行效率的比较(整理)
  2. java中两个事物,怎么设置,能让一个事物出现异常,另一个也回滚?哪位大
  3. Java:IntelliJ想法生成的代码错误地为所有Class名称添加了其包名
  4. 与==两个字符串的Java比较是假的? [重复]
  5. 求一段与读取数据库数据,写入一个数组的javascript 代码!谢谢!!
  6. java动态编译 (java在线执行代码后端实现原理)
  7. leetcode解题之242# Valid Anagram Java版 (判断两个字母串是否具
  8. java SSH员工管理系统以及Demo代码下载
  9. JavaScript 面向对象编程,严格过程的标准化编程法,目前为止最好的

随机推荐

  1. c语言真假是1和0吗?
  2. 学习asp.net core集成MongoDB的完整步骤
  3. c语言三种基本程序结构是什么?
  4. printf("\n")是什么意思?
  5. .Net Core对MongoDB执行多条件查询
  6. C语言中用于结构化程序设计的三种基本结
  7. 在c语言中char型数据在内存中的存储形式
  8. 引用和指针有什么区别
  9. c语言include<stdlib.h>什么意思?
  10. \0在c语言中代表什么?