06原型和单例模式代码实现
分析并运行程序代码,先说明选择的设计模式,再画出其类图。
单例模式
- 类图:
- 源代码:
- Visitor
package com.fish.factory.singletonPattern.lab3_1;
public class Visitor {
private static Visitor visitor = new Visitor();
private static int num = 0;
private Visitor() {
}
public static Visitor getVisitor() {
num++;
System.out.println("欢迎用户光临本站!");
return visitor;
}
public int getNumber() {
return Visitor.num;
}
}
- Client2010
package com.fish.factory.singletonPattern.lab3_1;
public class Client2010 {
public static void main(String[] args) {
Visitor v1,v2;
v1 = Visitor.getVisitor();
v2 = Visitor.getVisitor();
int n = v2.getNumber();
System.out.println("总访问人数是:"+n);
}
}
- 运行结果:
开发一个应用“原型模式”的程序实例——用原型模式生成“三好学生”奖状。**同一学校的“三好学生”奖状除了获奖人姓名不同,其他都相同,属于相似对象的复制,可以用原型模式创建,然后再做简单修改就可以了。
- 类图:
- 源代码:
- Citation
package com.fish.factory.prototypePattern;
public class Citation implements Cloneable{
protected String name;
protected String info;
protected String college;
public Citation(String name, String info, String college) {
this.name = name;
this.info = info;
this.college = college;
System.out.println("奖状创建成功");
}
public String getName() {
return name;
}
public Object clone() throws CloneNotSupportedException {
System.out.println("奖状拷贝成功!");
return (Citation) super.clone();
}
public void setName(String name) {
this.name = name;
}
public void display(){
System.out.println(name+info+college);
}
}
- ProtoTypeCitation
package com.fish.factory.prototypePattern;
public class ProtoTypeCitation {
public static void main(String[] args) throws CloneNotSupportedException {
Citation obj1 = new Citation("1","1","1");
Citation obj2 = (Citation) obj1.clone();
System.out.println("第一个成绩单:");
obj1.display();
System.out.println("第二个成绩单:");
obj2.display();
System.out.println(obj1==obj2);
}
}
- 运行结果:
开发一个应用“单例模式”的程序实例——用懒汉式单例。**模式模拟产生美国当今总统对象。在每一届任期内,美国的总统只有一人,所以本实例适合用单例模式实现。
- 类图:
- 源代码:
- President
package com.fish.factory.singletonPattern.lab3_2;
public class President {
private static President instance=null;
private President() {
}
public static President getInstance() {
if(instance==null){
synchronized (President.class){
instance = new President();
}
}else {
System.out.println("已经有一个总统,不能产生新总统");
}
return instance;
}
public void getName(){}
}
- SingletonLazy
package com.fish.factory.singletonPattern.lab3_2;
public class SingletonLazy {
public static void main(String[] args) {
System.out.println("产生第一个总统");
President p1 = President.getInstance();
System.out.println("产生第二个总统");
President p2 = President.getInstance();
}
}
- 运行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律