建造者模式

这里写图片描述

抽象建造者
/**
 * 建造者角色
 * 工人接口,定义了各个工人所需要进行的工作
 * 并不负责具体的建造
 * 
 * 同时房子是具体的(农民工)建造的  所以需要有返回房子的方法
 * @author tucheng
 *
 */
public interface Build {
    public void makeWindow();

    public void  makeFloor();

    public Room getRoom();

}
具体建造者
public class WorkBuilder  implements Build{
    private Room room=new Room();
    @Override
    public void makeWindow() {
        room.setFloor("地板  ");
    }

    @Override
    public void makeFloor() {
        room.setWindow("窗户");
    }

    @Override
    public Room getRoom() {
        return room;
    }

}
设计者
/**
 * 指导者 角色
 * 所具备的能力
 * 
 * 设计师  他知道房子怎么设计
 * 他会指挥工人去建造
 * 实际生活中  大厦的设计者并不会看大厦的具体实现细节
 * 更多的是从整体角度出发,指挥这个工人团队建造
 * 所以他肯定对工人所具备的能力和行为有很深的了解
 * 换做程序代码中 ,他也肯定会持有工人 的这个对象的引用
 * 
 * 
 * @author tucheng
 *
 */
public class Designer {

    public void order(Build build)
    {
        build.makeFloor();
        build.makeWindow();
    }



}
产品
/**
 * 房子类  
 * 首先要描述下 房子要有些什么
 * 有哪些属性
 * 
 * @author tucheng
 *
 */
public class Room {
    private String window;  
    private String floor;
    public String getWindow() {
        return window;
    }
    public void setWindow(String window) {
        this.window = window;
    }
    public String getFloor() {
        return floor;
    }
    public void setFloor(String floor) {
        this.floor = floor;
    }

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "---->floor  "+floor+"   window   "+window;
    }

}
测试部分
public class Client {
      public static void main(String[] args) {    
             Build worker = new WorkBuilder(); //获取工人对象   
             Designer  designer = new  Designer();   //获取设计师对象 
             designer.order(worker);    //设计师指挥工人工作
             System.out.println(worker.getRoom());;   //工人交房 
          }  
}

我们常用的并不是标准的建造者模式,而是建造者模式的一种变形,省略了设计者这个环节

/**
 * 房子类  
 * 首先要描述下 房子要有些什么
 * 有哪些属性
 * 
 * @author tucheng
 *
 */
public class Room {
    private String window;  
    private String floor;
    private String doorl;
    private String  chat;
    public void apply(WorkBuilder.RoomParmas parmas)
    {
        window=parmas.window;
        floor=parmas.floor;
        doorl=parmas.door;
        chat=parmas.chat;
    }
    public void setChat(String chat) {
        this.chat = chat;
    }
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "---->floor  "+floor+"   window   "+window;
    }
    public void show()
    {

    }

}

public class WorkBuilder{
    private RoomParmas parmas;


    public WorkBuilder( ) {
        this.parmas = new RoomParmas();
    }

    public  WorkBuilder makeWindow(String window ) {
        parmas.window=window;
        return this;
    }

    public WorkBuilder makeFloor(String floorCorlor) {
        parmas.floor=floorCorlor;
        return this;
    }
    public WorkBuilder makeDoor(String door) {
        parmas.door=door;
        return this;
    }
    public Room makeChat(String  chat) {
        parmas.chat=chat;
        Room room=new Room();
        return room;
    }
    public  void show()
    {

    }
    public Room build() {
        Room room=new Room();
        room.apply(parmas);
        return room;
    }


    class RoomParmas
    {
        public  String window;  
        public String floor;
        public String door;
        public String  chat;

    }

}

public class Client {
      public static void main(String[] args) {    
             Room room=(new WorkBuilder()).makeWindow("蓝色玻璃").makeFloor("黄色地板").makeChat("").show();; //获取工人对象   
             System.out.println(room);;   //工人交房 
          }  
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android中的建造者模式是一种设计模式,用于创建复杂对象。它提供了一种流畅的方式来构建对象,使得代码更易读、易维护。在Android开发中,建造者模式常常用于创建具有多个可选参数的对象,以及避免使用过多的构造函数重载。 建造者模式由以下几个组成部分: 1. 产品类(Product):要创建的复杂对象。 2. 抽象建造者类(Builder):定义了创建产品各个部分的抽象方法。 3. 具体建造者类(Concrete Builder):实现抽象建造者接口,负责具体产品部件的构建。 4. 指导者类(Director):负责调用具体建造者来构建产品对象。 5. 客户端(Client):使用指导者来构建产品对象。 在Android中,我们可以根据具体需求来自定义建造者模式。例如,在创建一个用户对象时,可以使用建造者模式来设置用户的各个属性(如用户名、年龄、性别等),以及可选的属性(如地址、电话等)。这样可以避免使用多个构造函数来处理不同的参数组合,并且使代码更加清晰和可扩展。 下面是一个简单的示例代码: ```java public class User { private String username; private int age; private String gender; private String address; private String phone; private User(Builder builder) { this.username = builder.username; this.age = builder.age; this.gender = builder.gender; this.address = builder.address; this.phone = builder.phone; } public static class Builder { private String username; private int age; private String gender; private String address; private String phone; public Builder setUsername(String username) { this.username = username; return this; } public Builder setAge(int age) { this.age = age; return this; } public Builder setGender(String gender) { this.gender = gender; return this; } public Builder setAddress(String address) { this.address = address; return this; } public Builder setPhone(String phone) { this.phone = phone; return this; } public User build() { return new User(this); } } } // 使用示例 User user = new User.Builder() .setUsername("John") .setAge(25) .setGender("Male") .build(); ``` 在上述示例中,User类是要创建的复杂对象,Builder类是具体建造者类。通过调用Builder类的方法来设置各个属性,并最后调用build()方法返回构建的User对象。这样可以灵活地创建具有不同属性组合的User对象,而无需使用多个构造函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值