好的,我可以为你生成一本Markdown格式的学习文档,主题是设计模式学习笔记,并为你提供一些实例。
设计模式学习笔记
什么是设计模式?
设计模式(Design Patterns),又称设计样式,是一套被反复使用的、经过分类的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被理解和修改、保证代码的可靠性。它是软件工程中的一种常用方法,也是面向对象设计中的一种重要思想。
常见的设计模式
以下列举了几种常见的设计模式:
工厂模式(Factory Pattern)
工厂模式是一种用于创建对象的模式,它通过一个共同的接口来创建不同的对象。在工厂模式中,创建对象的工作由工厂类完成,客户端只需要调用工厂类即可。这样客户端就无需知道具体的创建过程,从而降低了客户端与具体实现类之间的耦合度。
示例代码:
javaCopy Codeinterface Shape {
void draw();
}
class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("画一个矩形");
}
}
class Circle implements Shape {
@Override
public void draw() {
System.out.println("画一个圆形");
}
}
class ShapeFactory {
public Shape createShape(String shapeType) {
if (shapeType.equalsIgnoreCase("circle")) {
return new Circle();
} else if (shapeType.equalsIgnoreCase("rectangle")) {
return new Rectangle();
} else {
return null;
}
}
}
public class FactoryPatternDemo {
public static void main(String[] args) {
ShapeFactory shapeFactory = new ShapeFactory();
Shape circle = shapeFactory.createShape("circle");
circle.draw();
Shape rectangle = shapeFactory.createShape("rectangle");
rectangle.draw();
}
}
单例模式(Singleton Pattern)
单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供了一个全局访问点。在实现单例模式时,需要保证线程安全和防止反序列化破坏单例。
示例代码:
javaCopy Codepublic class Singleton {
private volatile static Singleton uniqueInstance;
private Singleton() {}
public static Singleton getInstance() {
if (uniqueInstance == null) {
synchronized (Singleton.class) {
if (uniqueInstance == null) {
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
}
观察者模式(Observer Pattern)
观察者模式是一种行为型设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,其所有依赖对象都会收到通知并自动更新。观察者模式有两种角色,分别是被观察者和观察者。
示例代码:
javaCopy Codeinterface Subject {
void attach(Observer observer);
void detach(Observer observer);
void notifyObservers();
}
interface Observer {
void update(String message);
}
class ConcreteSubject implements Subject {
private List<Observer> observers;
private String message;
public ConcreteSubject() {
observers = new ArrayList<>();
}
@Override
public void attach(Observer observer) {
observers.add(observer);
}
@Override
public void detach(Observer observer) {
observers.remove(observer);
}
@Override
public void notifyObservers() {
for (Observer observer : observers) {
observer.update(message);
}
}
public void setMessage(String message) {
this.message = message;
notifyObservers();
}
}
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 class ObserverPatternDemo {
public static void main(String[] args) {
ConcreteSubject subject = new ConcreteSubject();
Observer observer1 = new ConcreteObserver("张三");
Observer observer2 = new ConcreteObserver("李四");
subject.attach(observer1);
subject.attach(observer2);
subject.setMessage("这是一条通知");
}
}
总结
以上就是几种常见的设计模式,包括工厂模式、单例模式和观察者模式。使用设计模式可以提高代码的复用性和可维护性,让代码更加灵活、可靠和易于理解。