简介:
本文是个系列一次会出两个设计者模式作用,如果有关联就三个,除此外还会讲解在spring中作用。
23设计者模式以及重点模式
我们都知道设计者模式有3类23种设计模式,标红是特别重要的设计者模式建议都会,而且熟读于心,标蓝是指其次重要建议也要明白。
(1)创建型模式:单例模式、抽象工厂模式、构建者模式、工厂模式、原型模式。
(2)结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
(3)行为型模式:访问者模式、模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式。
装饰器模式(Decorator Pattern)
装饰器模式是一种结构型设计模式,允许动态地向一个对象添加额外的职责。在不改变对象自身的基础上,通过创建一个包装对象来“装饰”原始对象。这种模式创建了一个装饰类,用来包裹原始类,并在保持原类方法签名完整性的同时提供了额外的功能。
装饰器模式 专注于动态地添加职责到对象上,是一种灵活的替代继承的方法。
使用场景
- 当不想或不能通过继承增加对象的职责时,例如,当系统中的职责在运行时可能动态变化,或职责可选时。
- 当需要为一个对象添加一些额外的功能,并且这些功能可以动态地被添加或删除。
示例
// 抽象组件 interface Coffee { String getDescription(); double cost(); } // 具体组件 class SimpleCoffee implements Coffee { public String getDescription() { return "Simple Coffee"; } public double cost() { return 2.0; } } // 装饰器基类 abstract class CoffeeDecorator implements Coffee { protected Coffee decoratedCoffee; public CoffeeDecorator(Coffee decoratedCoffee) { this.decoratedCoffee = decoratedCoffee; } public String getDescription() { return decoratedCoffee.getDescription(); } public double cost() { return decoratedCoffee.cost(); } } // 具体装饰器 class MilkDecorator extends CoffeeDecorator { public MilkDecorator(Coffee decoratedCoffee) { super(decoratedCoffee); } public String getDescription() { return decoratedCoffee.getDescription() + ", Milk"; } public double cost() { return decoratedCoffee.cost() + 0.5; } } // 测试类 public class DecoratorPatternDemo { public static void main(String[] args) { Coffee coffee = new SimpleCoffee(); coffee = new MilkDecorator(coffee); System.out.println(coffee.getDescription() + " Cost: $" + coffee.cost()); } }
在这个示例中,
模板方法模式(Template Method Pattern)
模板方法模式是一种行为型设计模式,它在父类中定义了一个操作的算法的骨架,而将一些步骤的实现延迟到子类中。这样,可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
模板方法模式 在父类中定义了算法的框架,允许子类在不改变算法结构的情况下重写算法的特定步骤。
使用场景
- 当有多个类包含相同的算法,但算法的某些步骤在这些类之间有所不同时。
- 当需要控制子类扩展时。模板方法只在特定点调用“钩子”方法,这允许在这些点进行扩展。
示例
// 抽象类 abstract class Game { abstract void initialize(); abstract void startPlay(); abstract void endPlay(); // 模板方法 public final void play() { initialize(); startPlay(); endPlay(); } } // 具体类 class Cricket extends Game { void initialize() { System.out.println("Cricket Game Initialized!"); } void startPlay() { System.out.println("Cricket Game Started!"); } void endPlay() { System.out.println("Cricket Game Finished!"); } } // 测试类 public class TemplateMethodPatternDemo { public static void main(String[] args) { Game game = new Cricket(); game.play(); } }
在这个示例中,
------------------------------------------与正文内容无关------------------------------------
如果觉的文章写对各位读者老爷们有帮助的话,麻烦点赞加关注呗!作者在这拜谢了!
混口饭吃了!如果你需要Java 、Python毕设、网页和系统设计,还有你是刚入职的新手需要度过试用期。请在关注私信我,本人看到一定马上回复!