当前位置: 首页 > news >正文

软件设计之生成器模式

 理解生成器模式在于:一个对象若由多个部分组成,只要构建好这些部分然后拼接到一起就组成了一个完整的对象。比如一台电脑,它的类型可以不一样,可以是苹果的,可以是联想的,等等。同一款电脑它的组件也不一样,有的内存大一点,有的CPU高级点。如果把不同款式的电脑都封装成一个对象的话就比较复杂,使用生成器模式可以快速构建自己需要的对象。下面使用这个案例说明。

 

package Builder;public class Client {public static void main(String[] args) {Direct direct = new Direct();ComputerBulider computerBuliderA = new ComputerABuilder();direct.setCb(computerBuliderA);Computer computerA = direct.contructor();System.out.println(computerA.toString());ComputerBulider computerBuliderB = new ComputerBBuilder();direct.setCb(computerBuliderB);Computer computerB = direct.contructor();System.out.println(computerB.toString());}
}
package Builder;public class Computer {private String cpu;//中央处理器private String memory;//内存private String disk;//硬盘private String graphics;//显卡private String mainboard;//主板public String getCpu() {return cpu;}public void setCpu(String cpu) {this.cpu = cpu;}public String getMemory() {return memory;}public void setMemory(String memory) {this.memory = memory;}public String getDisk() {return disk;}public void setDisk(String disk) {this.disk = disk;}public String getGraphics() {return graphics;}public void setGraphics(String graphics) {this.graphics = graphics;}public String getMainboard() {return mainboard;}public void setMainboard(String mainboard) {this.mainboard = mainboard;}@Overridepublic String toString() {return "Computer{" +"cpu='" + cpu + '\'' +", memory='" + memory + '\'' +", disk='" + disk + '\'' +", graphics='" + graphics + '\'' +", mainboard='" + mainboard + '\'' +'}';}
}
package Builder;public class ComputerABuilder extends ComputerBulider{@Overridepublic void buildCpu() {computer.setCpu("CPUA");}@Overridepublic void buildMemory() {computer.setMemory("内存A");}@Overridepublic void buildDisk() {computer.setDisk("硬盘A");}@Overridepublic void buildGraphics() {computer.setGraphics("显卡A");}@Overridepublic void buildMainboard() {computer.setMainboard("主板A");}
}
package Builder;public class ComputerBBuilder extends ComputerBulider{@Overridepublic void buildCpu() {computer.setCpu("CPUB");}@Overridepublic void buildMemory() {computer.setMemory("内存B");}@Overridepublic void buildDisk() {computer.setDisk("硬盘B");}@Overridepublic void buildGraphics() {computer.setGraphics("显卡B");}@Overridepublic void buildMainboard() {computer.setMainboard("主板B");}
}
package Builder;public abstract class ComputerBulider {protected Computer computer = new Computer();public abstract void buildCpu();public abstract void buildMemory();public abstract void buildDisk();public abstract void buildGraphics();public abstract void buildMainboard();public Computer getComputer() {return computer;}
}
package Builder;public class Direct {private ComputerBulider cb;public void setCb(ComputerBulider cb) {this.cb = cb;}public Computer contructor() {cb.buildDisk();cb.buildGraphics();cb.buildCpu();cb.buildMainboard();cb.buildMemory();return cb.getComputer();}
}

所有的电脑都是一个产品Product,所有的组件都在这里声明。ConcreteBulider作用是构建电脑具体的部件,Direct作用是将部件组装,并提供方法可以让Client拿到电脑。在Client中声明了Direct和ConcreteBulider,将ConcreteBulider传入Direct中完成组装然后调用方法拿到电脑。

http://www.lryc.cn/news/248922.html

相关文章:

  • 【Vulnhub 靶场】【CEREAL: 1】【困难】【20210529】
  • 【Vulnhub靶机】Jarbas--Jenkins
  • Java面向对象第8天
  • 数据结构与算法复习笔记
  • 关于微服务的思考
  • 计算机毕业设计 基于Web的课程设计选题管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 群晖NAS:docker(Container Manager)、npm安装Verdaccio并常见命令集合
  • 老师旁听公开课到底听什么
  • 一文让你深入了解JavaSE的知识点
  • 人体是否有清除hpv病毒能力?北京劲松HPV诊疗中心提出观点
  • Linux下~目录和home目录的区别
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • 如何实现大数据渲染
  • 【差旅游记】走进新疆哈密博物馆
  • 单片机学习6——定时器/计数功能的概念
  • a-table:表格组件常用功能记录——基础积累2
  • leetCode 131.分割回文串 + 回溯算法 + 图解 + 笔记
  • 浅谈对于Android CMakeLists文件的理解
  • 虚函数可不可以重载为内联 —— 在开启最大优化时gcc、clang和msvc的表现
  • 【开源】基于Vue+SpringBoot的智能教学资源库系统
  • Sass基础知识之【变量】
  • 云原生系列Go语言篇-泛型Part 1
  • 力扣1089题 复写零 双指针解法
  • Redis基础与运用
  • PTA:猜帽子游戏 ,C语言
  • ESP32基于IDF框架OTA学习记录
  • 分布式技术(一)分布式的架构的演进
  • webpack 打包优化
  • electron windows robotjs 安装教程
  • IDEA解决Git冲突详解