当前位置: 首页 > news >正文

Head First设计模式学习笔记

Head First设计模式学习笔记

大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!

一、策略模式

策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

package cn.juwatech.strategy;interface QuackBehavior {void quack();
}class Quack implements QuackBehavior {public void quack() {System.out.println("Quack");}
}class Squeak implements QuackBehavior {public void quack() {System.out.println("Squeak");}
}abstract class Duck {QuackBehavior quackBehavior;public void performQuack() {quackBehavior.quack();}public void setQuackBehavior(QuackBehavior qb) {this.quackBehavior = qb;}abstract void display();
}class MallardDuck extends Duck {public MallardDuck() {quackBehavior = new Quack();}void display() {System.out.println("I'm a Mallard Duck");}
}public class StrategyPatternDemo {public static void main(String[] args) {Duck mallard = new MallardDuck();mallard.performQuack();mallard.setQuackBehavior(new Squeak());mallard.performQuack();}
}

二、观察者模式

观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象发生变化时,它的所有依赖者(观察者)都会收到通知并更新。

package cn.juwatech.observer;import java.util.ArrayList;
import java.util.List;interface Observer {void update(float temp, float humidity, float pressure);
}interface Subject {void registerObserver(Observer o);void removeObserver(Observer o);void notifyObservers();
}class WeatherData implements Subject {private List<Observer> observers;private float temperature;private float humidity;private float pressure;public WeatherData() {observers = new ArrayList<>();}public void registerObserver(Observer o) {observers.add(o);}public void removeObserver(Observer o) {observers.remove(o);}public void notifyObservers() {for (Observer observer : observers) {observer.update(temperature, humidity, pressure);}}public void measurementsChanged() {notifyObservers();}public void setMeasurements(float temperature, float humidity, float pressure) {this.temperature = temperature;this.humidity = humidity;this.pressure = pressure;measurementsChanged();}
}class CurrentConditionsDisplay implements Observer {private float temperature;private float humidity;private Subject weatherData;public CurrentConditionsDisplay(Subject weatherData) {this.weatherData = weatherData;weatherData.registerObserver(this);}public void update(float temp, float humidity, float pressure) {this.temperature = temp;this.humidity = humidity;display();}public void display() {System.out.println("Current conditions: " + temperature + "F degrees and " + humidity + "% humidity");}
}public class ObserverPatternDemo {public static void main(String[] args) {WeatherData weatherData = new WeatherData();CurrentConditionsDisplay currentDisplay = new CurrentConditionsDisplay(weatherData);weatherData.setMeasurements(80, 65, 30.4f);weatherData.setMeasurements(82, 70, 29.2f);}
}

三、装饰者模式

装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

package cn.juwatech.decorator;abstract class Beverage {String description = "Unknown Beverage";public String getDescription() {return description;}public abstract double cost();
}class Espresso extends Beverage {public Espresso() {description = "Espresso";}public double cost() {return 1.99;}
}abstract class CondimentDecorator extends Beverage {public abstract String getDescription();
}class Mocha extends CondimentDecorator {Beverage beverage;public Mocha(Beverage beverage) {this.beverage = beverage;}public String getDescription() {return beverage.getDescription() + ", Mocha";}public double cost() {return .20 + beverage.cost();}
}public class DecoratorPatternDemo {public static void main(String[] args) {Beverage beverage = new Espresso();System.out.println(beverage.getDescription() + " $" + beverage.cost());beverage = new Mocha(beverage);System.out.println(beverage.getDescription() + " $" + beverage.cost());}
}

四、工厂模式

工厂模式通过定义一个创建对象的接口,让子类决定实例化哪一个类。

package cn.juwatech.factory;abstract class Pizza {String name;void prepare() {System.out.println("Preparing " + name);}void bake() {System.out.println("Baking " + name);}void cut() {System.out.println("Cutting " + name);}void box() {System.out.println("Boxing " + name);}public String getName() {return name;}
}class CheesePizza extends Pizza {public CheesePizza() {name = "Cheese Pizza";}
}class GreekPizza extends Pizza {public GreekPizza() {name = "Greek Pizza";}
}abstract class PizzaStore {public Pizza orderPizza(String type) {Pizza pizza = createPizza(type);pizza.prepare();pizza.bake();pizza.cut();pizza.box();return pizza;}protected abstract Pizza createPizza(String type);
}class SimplePizzaFactory extends PizzaStore {protected Pizza createPizza(String type) {Pizza pizza = null;if (type.equals("cheese")) {pizza = new CheesePizza();} else if (type.equals("greek")) {pizza = new GreekPizza();}return pizza;}
}public class FactoryPatternDemo {public static void main(String[] args) {PizzaStore store = new SimplePizzaFactory();Pizza pizza = store.orderPizza("cheese");System.out.println("Ordered a " + pizza.getName() + "\n");pizza = store.orderPizza("greek");System.out.println("Ordered a " + pizza.getName() + "\n");}
}

本文著作权归聚娃科技微赚淘客系统开发者团队,转载请注明出处!

http://www.lryc.cn/news/417694.html

相关文章:

  • 240806-RHEL 无法通过 ssh username@ip 远程连接,报错:Connection closed by ip port 22
  • C语言:复读机2种写法(输入什么就输出什么)
  • PySide6/PyQT学习笔记(很杂)
  • 学习笔记-JWT 保持登录状态
  • React 性能优化
  • 后端常见问题及深度解决方案
  • C:野指针介绍(定义、危害、规避)以及野指针与空指针的区分
  • vue中v-html 后端返回html + script js中click事件不生效
  • 介绍maven生命周期-水温
  • spring boot3.x快速入门
  • JavaWeb之servlet关于Ajax实现前后端分离
  • vue3表格组件formatter
  • C# 使用NHibernate连接MySQL实现数据的增删改查
  • IDEA2024.2重磅发布,更新完有4G!
  • QWT+Qt Creator+MSVC的配置与使用
  • Netty高性能数据结构
  • 关于百度、微软语音合成的实现案例
  • 二叉树:镜像树,子结构,二叉树转链表,二叉树的倒数K个数,对称,Z型打印
  • 瑞秋,詹妮弗·安妮斯顿多年来与本·阿弗莱克保持着“调情”友谊 又一个詹妮弗
  • 指纹失效,忘记iPhone屏幕解锁密码怎么应对?
  • 09.XSS跨站脚本攻击(超详细!!!)
  • 讲解人工智能在现代科技中的应用和未来发展趋势-水文
  • 2.2 QT 环境配置
  • 2.类和对象(上)
  • 【实际案例】服务器宕机情况分析及处理建议
  • Linux系统之ncdu命令的基本使用
  • STM32L051K8U6-HAL-LED闪烁设计
  • 记一次远程API调用失败
  • 【力扣】746.使用最小花费爬楼梯
  • 06:【stm32】中断一:NVIC的配置