06原型和单例模式代码实现

发布时间 2023-04-24 21:19:43作者: vbig

分析并运行程序代码,先说明选择的设计模式,再画出其类图。

单例模式

  1. 类图:

Pasted image 20230315100211

  1. 源代码:
  • 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);

    }

}
  1. 运行结果:

Pasted image 20230315100255

开发一个应用“原型模式”的程序实例——用原型模式生成“三好学生”奖状。**同一学校的“三好学生”奖状除了获奖人姓名不同,其他都相同,属于相似对象的复制,可以用原型模式创建,然后再做简单修改就可以了。

  1. 类图:

Pasted image 20230315100346

  1. 源代码:
  • 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);

    }

}
  1. 运行结果:

Pasted image 20230315100407

开发一个应用“单例模式”的程序实例——用懒汉式单例。**模式模拟产生美国当今总统对象。在每一届任期内,美国的总统只有一人,所以本实例适合用单例模式实现。

  1. 类图:

Pasted image 20230315100432

  1. 源代码:
  • 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();

    }

}
  1. 运行结果:

Pasted image 20230315100452