首页 > 编程语言 >Java设计模式之单例模式、工厂模式、PO模式【多测师_王sir】

Java设计模式之单例模式、工厂模式、PO模式【多测师_王sir】

时间:2022-10-26 11:03:49浏览次数:39  
标签:sir draw SingleObject 对象 创建 模式 Shape 设计模式 public

Java设计模式之单例模式、工厂模式、PO模式【多测师_王sir】_java

一)、工厂模式
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的
设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使
其创建过程延迟到子类进行。
实现:
我们将创建一个 Shape 接口和实现 Shape 接口的实体类。下一步是定义工厂类 ShapeFactory。
FactoryPatternDemo,我们的演示类使用 ShapeFactory 来获取 Shape 对象。
它将向 ShapeFactory 传递信息(CIRCLE / RECTANGLE / SQUARE),以便
获取它所需对象的类型。

Java设计模式之单例模式、工厂模式、PO模式【多测师_王sir】_实例化_02

步骤 1
创建一个接口:
Shape.java
public interface Shape {
void draw();
}
步骤 2
创建实现接口的实体类。
Rectangle.java
public class Rectangle implements Shape {

@Override
public void draw() {
System.out.println("Inside Rectangle::draw() method.");
}
}
Square.java
public class Square implements Shape {

@Override
public void draw() {
System.out.println("Inside Square::draw() method.");
}
}
Circle.java
public class Circle implements Shape {

@Override
public void draw() {
System.out.println("Inside Circle::draw() method.");
}
}
步骤 3
创建一个工厂,生成基于给定信息的实体类的对象。
ShapeFactory.java
public class ShapeFactory {

//使用 getShape 方法获取形状类型的对象
public Shape getShape(String shapeType){
if(shapeType == null){
return null;
}
if(shapeType.equalsIgnoreCase("CIRCLE")){
return new Circle();
} else if(shapeType.equalsIgnoreCase("RECTANGLE")){
return new Rectangle();
} else if(shapeType.equalsIgnoreCase("SQUARE")){
return new Square();
}
return null;
}
}
步骤 4
使用该工厂,通过传递类型信息来获取实体类的对象。
FactoryPatternDemo.java
public class FactoryPatternDemo {

public static void main(String[] args) {
ShapeFactory shapeFactory = new ShapeFactory();

//获取 Circle 的对象,并调用它的 draw 方法
Shape shape1 = shapeFactory.getShape("CIRCLE");

//调用 Circle 的 draw 方法
shape1.draw();

//获取 Rectangle 的对象,并调用它的 draw 方法
Shape shape2 = shapeFactory.getShape("RECTANGLE");

//调用 Rectangle 的 draw 方法
shape2.draw();

//获取 Square 的对象,并调用它的 draw 方法
Shape shape3 = shapeFactory.getShape("SQUARE");

//调用 Square 的 draw 方法
shape3.draw();
}
}
步骤 5
执行程序,输出结果:
Inside Circle::draw() method.
Inside Rectangle::draw() method.
Inside Square::draw() method.

 

二)、单例模式
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型
的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单
个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访
问,不需要实例化该类的对象。
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。

保证一个类仅有一个实例,并提供一个访问它的全局访问点。
判断系统是否已经有这个单例,如果有则返回,如果没有则创建。
注意事项:
getInstance() 方法中需要使用同步锁 synchronized (Singleton.class)
防止多线程同时进入造成 instance 被多次实例化。

实现
我们将创建一个 SingleObject 类。SingleObject 类有它的私有构造函数
和本身的一个静态实例。
SingleObject 类提供了一个静态方法,供外界获取它的静态实例。
SingletonPatternDemo,我们的演示类使用 SingleObject 类来
获取 SingleObject对象。

Java设计模式之单例模式、工厂模式、PO模式【多测师_王sir】_实例化_03

 

 

步骤 1
创建一个 Singleton 类。
SingleObject.java
public class SingleObject {

//创建 SingleObject 的一个对象
private static SingleObject instance = new SingleObject();

//让构造函数为 private,这样该类就不会被实例化
private SingleObject(){}

//获取唯一可用的对象
public static SingleObject getInstance(){
return instance;
}

public void showMessage(){
System.out.println("Hello World!");
}
}
步骤 2
从 singleton 类获取唯一的对象。
SingletonPatternDemo.java
public class SingletonPatternDemo {
public static void main(String[] args) {

//不合法的构造函数
//编译时错误:构造函数 SingleObject() 是不可见的
//SingleObject object = new SingleObject();

//获取唯一可用的对象
SingleObject object = SingleObject.getInstance();

//显示消息
object.showMessage();
}
}
步骤 3
执行程序,输出结果:
Hello World!

 



标签:sir,draw,SingleObject,对象,创建,模式,Shape,设计模式,public
From: https://blog.51cto.com/u_15846941/5797414

相关文章