网站开发修改端口,外链在线发布工具,大型门户网站后端,网站网站建设设计公司原型模式 原型模式#xff08;创建型模式#xff09;#xff0c;核心思想就是#xff1a;基于一个已有的对象复制一个对象出来#xff0c;通过复制来减少对象的直接创建的成本。 总结一下#xff0c;原型模式的两种方法#xff0c;浅拷贝只会复制对象里面的基本数据类型…原型模式 原型模式创建型模式核心思想就是基于一个已有的对象复制一个对象出来通过复制来减少对象的直接创建的成本。 总结一下原型模式的两种方法浅拷贝只会复制对象里面的基本数据类型和引用对象的内存地址不会递归地复制引用对象以及引用对象的引用对象。而深拷贝就是会完全拷贝一个新的对象出来。所以深拷贝的操作会比浅拷贝更加耗时性能更差一点。同时浅拷贝的代码写起来也比深拷贝的代码写起来更简单一点。如果咱们拷贝的对象是不可变的也就是说我这个对象只会查看不会增删改那么直接用浅拷贝就好了如果拷贝的对象存在增删改的情况那么就需要使用深拷贝了。总而言之就是要深浅得当根据项目实际情况而定。 代码举例 // 原型接口
interface Shape extends Cloneable {void draw();Shape clone();
}// 具体原型类 - 圆形
class Circle implements Shape {private String color;public Circle(String color) {this.color color;}Overridepublic void draw() {System.out.println(Drawing a circle with color: color);}Overridepublic Shape clone() {return new Circle(color);}
}// 具体原型类 - 正方形
class Square implements Shape {private String color;public Square(String color) {this.color color;}Overridepublic void draw() {System.out.println(Drawing a square with color: color);}Overridepublic Shape clone() {return new Square(color);}
}// 原型管理器
class ShapeCache {private static MapString, Shape shapeMap new HashMap();public static Shape getShape(String type) {Shape cachedShape shapeMap.get(type);return (Shape) cachedShape.clone();}public static void loadCache() {Circle circle new Circle(red);shapeMap.put(circle, circle);Square square new Square(blue);shapeMap.put(square, square);}
}// 示例使用
public class PrototypePatternExample {public static void main(String[] args) {ShapeCache.loadCache();Shape clonedShape1 ShapeCache.getShape(circle);clonedShape1.draw(); // 输出: Drawing a circle with color: redShape clonedShape2 ShapeCache.getShape(square);clonedShape2.draw(); // 输出: Drawing a square with color: blue}
}模板模式 模板方法模式也非常简单但是他却是比较重要的在很多开源框架里面都用到了这个模式并且我们在做项目的时候也会经常用到这个模式。这个模板方法模式简单来说就是一句话在父类中定义业务处理流程的框架到子类中去做具体的实现。 代码举例
// 抽象模板类
abstract class Game {abstract void initialize();abstract void startPlay();abstract void endPlay();// 模板方法定义算法框架public final void play() {initialize();startPlay();endPlay();}
}// 具体模板类 - 足球游戏
class FootballGame extends Game {Overridevoid initialize() {System.out.println(Football Game Initialized! Start playing.);}Overridevoid startPlay() {System.out.println(Playing football...);}Overridevoid endPlay() {System.out.println(Football Game Finished!);}
}// 具体模板类 - 篮球游戏
class BasketballGame extends Game {Overridevoid initialize() {System.out.println(Basketball Game Initialized! Start playing.);}Overridevoid startPlay() {System.out.println(Playing basketball...);}Overridevoid endPlay() {System.out.println(Basketball Game Finished!);}
}// 示例使用
public class TemplatePatternExample {public static void main(String[] args) {Game footballGame new FootballGame();footballGame.play();// 输出:// Football Game Initialized! Start playing.// Playing football...// Football Game Finished!System.out.println();Game basketballGame new BasketballGame();basketballGame.play();// 输出:// Basketball Game Initialized! Start playing.// Playing basketball...// Basketball Game Finished!}
}策略模式 接着我们来看一下策略模式策略模式呢也是非常简单他就是定义一个主要的接口然后很多个类去实现这个接口比如说我们定义一个文件上传的接口然后阿里云的上传类去实现它腾讯云的上传类也去实现它这样因为都是实现的同一个接口所以上传类之间是可以在代码中互相替换的。 代码举例
// 策略接口
interface Strategy {int doOperation(int num1, int num2);
}// 具体策略类 - 加法
class AddStrategy implements Strategy {Overridepublic int doOperation(int num1, int num2) {return num1 num2;}
}// 具体策略类 - 减法
class SubtractStrategy implements Strategy {Overridepublic int doOperation(int num1, int num2) {return num1 - num2;}
}// 上下文类
class Context {private Strategy strategy;public Context(Strategy strategy) {this.strategy strategy;}public int executeStrategy(int num1, int num2) {return strategy.doOperation(num1, num2);}
}// 示例使用
public class StrategyPatternExample {public static void main(String[] args) {Context context new Context(new AddStrategy());int result1 context.executeStrategy(10, 5);System.out.println(10 5 result1); // 输出: 10 5 15context new Context(new SubtractStrategy());int result2 context.executeStrategy(10, 5);System.out.println(10 - 5 result2); // 输出: 10 - 5 5}
}
委派模式 委派模式Delegate Pattern又叫委托模式是一种面向对象的设计模式基本作用就是负责任务的调用和分配是一种特殊的静态代理可以理解为全权代理代理模式注重过程而委派模式注重结果委派模式属于行为型模式不属于GOF23种设计模式 代码举例
// 委派接口
interface Printer {void print();
}// 具体委派类 - 打印机A
class PrinterA implements Printer {Overridepublic void print() {System.out.println(Printer A is printing.);}
}// 具体委派类 - 打印机B
class PrinterB implements Printer {Overridepublic void print() {System.out.println(Printer B is printing.);}
}// 委派类
class PrinterManager {private Printer printer;public void setPrinter(Printer printer) {this.printer printer;}public void print() {printer.print();}
}// 示例使用
public class DelegatePatternExample {public static void main(String[] args) {PrinterManager printerManager new PrinterManager();// 使用打印机APrinterA printerA new PrinterA();printerManager.setPrinter(printerA);printerManager.print(); // 输出: Printer A is printing.System.out.println();// 使用打印机BPrinterB printerB new PrinterB();printerManager.setPrinter(printerB);printerManager.print(); // 输出: Printer B is printing.}
}
适配器模式 适配器模式也比较简单核心思想就是是将一个类的接口转换成客户希望的另一个接口讲白了就是通过适配器可以将原本不匹配、不兼容的接口或类结合起来 代码举例
// 目标接口
interface Target {void request();
}// 适配者类
class Adaptee {public void specificRequest() {System.out.println(Specific request from Adaptee.);}
}// 适配器类
class Adapter implements Target {private Adaptee adaptee;public Adapter(Adaptee adaptee) {this.adaptee adaptee;}Overridepublic void request() {adaptee.specificRequest();}
}// 示例使用
public class AdapterPatternExample {public static void main(String[] args) {Adaptee adaptee new Adaptee();Target adapter new Adapter(adaptee);adapter.request(); // 输出: Specific request from Adaptee.}
}