设计模式--建造者模式、单例模式、适配器模式
建造者模式
类图
源码
package com.bulid; public class Computer { private String cpu;//必须 private String ram;//必须 private int usbCount;//可选 private String keyboard;//可选 private String display;//可选 private Computer(Builder builder) { this.cpu = builder.cpu; this.ram = builder.ram; this.usbCount = builder.usbCount; this.keyboard = builder.keyboard; this.display = builder.display; } public static class Builder { private String cpu;//必须 private String ram;//必须 private int usbCount;//可选 private String keyboard;//可选 private String display;//可选 public Builder(String cpu, String ram) { this.cpu = cpu; this.ram = ram; } public Builder setUsbCount(int usbCount) { this.usbCount = usbCount; return this; } public Builder setKeyboard(String keyboard) { this.keyboard = keyboard; return this; } public Builder setDisplay(String display) { this.display = display; return this; } public Computer builder() { return new Computer(this); } } @Override public String toString() { final StringBuilder sb = new StringBuilder("Computer{"); sb.append("cpu='").append(cpu).append('\''); sb.append(", ram='").append(ram).append('\''); sb.append(", usbCount=").append(usbCount); sb.append(", keyboard='").append(keyboard).append('\''); sb.append(", display='").append(display).append('\''); sb.append('}'); return sb.toString(); } public static void main(String[] args) { // 建造正模式 Computer computer = new Computer.Builder("因特尔", "三星") .setDisplay("三星24寸") .setKeyboard("罗技") .setUsbCount(2) .builder(); System.out.println(computer); } }
测试截图
1|0单例模式
1|1类图
1|2
1|3源码
package com.test; public class StuNo { private static StuNo instance=null; private String no; private StuNo() { } public static StuNo getInstance() { if(instance==null) { System.out.println("入学,分配学号!"); instance=new StuNo(); instance.setStuNo("20193922"); } else { System.out.println("返校,获取旧号码!"); } return instance; } private void setStuNo(String no) { this.no=no; } public String getStuNo() { return this.no; } } Client.java package com.test; public class Client { public static void main(String a[]) { StuNo no1,no2; no1=StuNo.getInstance(); no2=StuNo.getInstance(); System.out.println("学号是否一致:" + (no1==no2)); String str1,str2; str1=no1.getStuNo(); str2=no1.getStuNo(); System.out.println("第一次学号:" + str1); System.out.println("第二次学号:" + str2); System.out.println("内容是否相等:" + str1.equalsIgnoreCase(str2)); System.out.println("是否是相同对象:" + (str1==str2)); } }
1|4测试截图
1|5
2|0 适配器模式
2|1类图
2|2源码
package adapter; public interface Cat { public void requestCat(); public void miao(); } Dog.java package adapter; public interface Dog { public void requestDog(); public void wang(); } ClassAdapterDog.java package adapter; public class ClassAdapterDog extends Adaptee implements Dog{ public void requestDog() { specificCat(); } @Override public void wang() { // TODO 自动生成的方法存根 System.out.println("狗汪汪叫!"); } } ClassAdapterCat.java package adapter; public class ClassAdapterCat extends Adaptee implements Cat{ public void requestCat() { specificDog(); } @Override public void miao() { // TODO 自动生成的方法存根 System.out.println("猫抓老鼠!"); } } Adaptee.java package adapter; public class Adaptee { public void specificCat() { System.out.println("猫学:"); } public void specificDog() { System.out.println("狗学:"); } } ClassAdapterTest.java package adapter; public class ClassAdapterTest { public static void main(String[] args) { System.out.println("测试:"); Dog target = new ClassAdapterDog(); target.requestDog(); target.wang(); Cat target1 = new ClassAdapterCat(); target1.requestCat(); target1.miao(); } }
2|3测试截图
__EOF__

本文作者:往心。
本文链接:https://www.cnblogs.com/lx06/p/15688350.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/lx06/p/15688350.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
2020-12-14 jsp标签问题