Java中的设计模式是一种被广泛应用的编程思想,它可以帮助开发者提高代码的可读性、可维护性、可扩展性等方面的优点。在本篇文章中,我们将详细讲解Java中的设计模式,包括创建型、结构型、行为型模式,并附带代码案例,适合编程小白学习。
创建型模式主要用于创建对象的过程,包括单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式。其中,单例模式是最简单的创建型模式,它保证在一个JVM中只有一个实例化的对象。下面我们来看一个简单的单例模式的代码实现。
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}上面的代码中,我们通过私有化构造函数、私有化静态变量和公共静态方法实现了一个单例模式。当我们需要使用该类的对象时,只需要调用getInstance()方法即可。
工厂模式是一种常用的创建型模式,主要用于创建复杂对象。它包括简单工厂模式、工厂方法模式和抽象工厂模式。下面我们来看一个简单工厂模式的代码实现。
public interface Animal {
void say();
}
public class Cat implements Animal {
@Override
public void say() {
System.out.println("喵喵喵");
}
}
public class Dog implements Animal {
@Override
public void say() {
System.out.println("汪汪汪");
}
}
public class AnimalFactory {
public static Animal create(String type) {
if ("cat".equals(type)) {
return new Cat();
} else if ("dog".equals(type)) {
return new Dog();
} else {
return null;
}
}
}上面的代码中,我们定义了一个Animal接口,然后实现了Cat和Dog两个类,并通过工厂类AnimalFactory来创建对象。当我们需要使用某个对象时,只需要调用AnimalFactory.create(type)方法即可。
抽象工厂模式是一种更为复杂的创建型模式,它可以创建一系列相关的对象。下面我们来看一个简单的抽象工厂模式的代码实现。
public interface Shape {
void draw();
}
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("画一个圆形");
}
}
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("画一个矩形");
}
}
public interface Color {
void fill();
}
public class Red implements Color {
@Override
public void fill() {
System.out.println("填充红色");
}
}
public class Green implements Color {
@Override
public void fill() {
System.out.println("填充绿色");
}
}
public abstract class AbstractFactory {
public abstract Shape getShape(String shape);
public abstract Color getColor(String color);
}
public class ShapeFactory extends AbstractFactory {
@Override
public Shape getShape(String shape) {
if ("circle".equals(shape)) {
return new Circle();
} else if ("rectangle".equals(shape)) {
return new Rectangle();
} else {
return null;
}
}
@Override
public Color getColor(String color) {
return null;
}
}
public class ColorFactory extends AbstractFactory {
@Override
public Shape getShape(String shape) {
return null;
}
@Override
public Color getColor(String color) {
if ("red".equals(color)) {
return new Red();
} else if ("green".equals(color)) {
return new Green();
} else {
return null;
}
}
}上面的代码中,我们定义了Shape、Color两个接口,然后实现了Circle、Rectangle、Red、Green四个类,并通过抽象工厂类AbstractFactory来创建对象。当我们需要使用某个对象时,只需要调用对应的AbstractFactory子类的getShape()或getColor()方法即可。
结构型模式主要用于组合不同对象形成更大的结构,包括适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式、代理模式。下面我们来看一个装饰器模式的代码实现。
public interface Shape {
void draw();
}
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("画一个圆形");
}
}
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("画一个矩形");
}
}
public abstract class ShapeDecorator implements Shape {
protected Shape shape;
public ShapeDecorator(Shape shape) {
this.shape = shape;
}
@Override
public void draw() {
shape.draw();
}
}
public class RedShapeDecorator extends ShapeDecorator {
public RedShapeDecorator(Shape shape) {
super(shape);
}
@Override
public void draw() {
shape.draw();
setRedBorder(shape);
}
private void setRedBorder(Shape shape){
System.out.println("边框颜色: 红色");
}
}上面的代码中,我们定义了Shape接口,然后实现了Circle、Rectangle两个类,并通过装饰器类ShapeDecorator来增加其它功能。当我们需要画一个带有红色边框的圆形时,只需要调用RedShapeDecorator(new Circle()).draw()方法即可。
行为型模式主要用于对象之间的通信和协作,包括责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式。下面我们来看一个观察者模式的代码实现。
public interface Observer {
void update(String message);
}
public class ConcreteObserver implements Observer {
private String name;
public ConcreteObserver(String name) {
this.name = name;
}
@Override
public void update(String message) {
System.out.println(name + "收到消息:" + message);
}
}
public interface Subject {
void registerObserver(Observer observer);
void removeObserver(Observer observer);
void notifyObservers(String message);
}
public class ConcreteSubject implements Subject {
private List observerList = new ArrayList<>();
@Override
public void registerObserver(Observer observer) {
observerList.add(observer);
}
@Override
public void removeObserver(Observer observer) {
observerList.remove(observer);
}
@Override
public void notifyObservers(String message) {
for (Observer observer : observerList) {
observer.update(message);
}
}
} 上面的代码中,我们定义了Observer、Subject两个接口,然后实现了ConcreteObserver、ConcreteSubject两个类,并通过观察者模式实现了对象之间的通信和协作。当我们需要订阅某个Subject的消息时,只需要实现Observer接口并通过Subject.registerObserver()方法进行注册即可。
以上就是Java中的设计模式详解,包括创建型、结构型、行为型模式,并附带了代码案例。希望能够帮助到编程小白们更好、更快地掌握设计模式的概念和实现方式。
本文为翻滚的胖子原创文章,转载无需和我联系,但请注明来自猿教程iskeys.com
