设计模式---策略模式And 观察者模式

策略模式

设计原则1:

找出应用中可能需要的变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起

设计原则2:

针对接口编程(超类), 而不是针对实现编程。

设计原则3:

多用组合,少用继承

用图表示吧,说多了也是废话。




观察者模式

设计原则4:为了交互对象之间的松耦合设计而努力

观察者模式中的  “推” 和 “拉”数据

推: 在notify()时,主题将自身和数据作为update()参数传给Observer。(所有观察者需要相同数据是比较好)

拉: notify()时,各个观察者根据自身需要 从自己的subject实例中获取对应相关数据。(Subject的数据要有隔天getter方法)


Java内置观察者模式

Observer接口和 Observable类

Observable类:

protect setChanged()方法       

notifyOberservers()和  notifyObservers(Object arg)//推数据

Obsever接口:

update(Observevable o, Object arg)

使用之处:

各种UI组件,用来绑定响应事件时。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计模式是一种经过验证的经验,被广泛认可并被用来解决特定类型问题的解决方案。设计模式可以帮助我们更好地组织和维护代码,并提高代码的可重用性、可扩展性和可维护性。下面我将介绍几种常见的设计模式及其详细教程。 1. 单例模式 单例模式是一种常用的创建型模式,它保证一个类只有一个实例,并提供一个全局访问点。单例模式的实现方式有多种,以下是其中一种基于懒汉式的实现: ```java public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } ``` 2. 工厂模式 工厂模式是一种常用的创建型模式,它提供一个统一的接口来创建对象,而不需要暴露对象的创建逻辑。工厂模式可以根据需要动态地创建对象,使代码更加灵活。以下是其中一种基于简单工厂的实现: ```java public interface Shape { void draw(); } public class Circle implements Shape { @Override public void draw() { System.out.println("Circle.draw()"); } } public class Square implements Shape { @Override public void draw() { System.out.println("Square.draw()"); } } public class ShapeFactory { public static Shape getShape(String type) { if (type.equalsIgnoreCase("circle")) { return new Circle(); } else if (type.equalsIgnoreCase("square")) { return new Square(); } return null; } } ``` 3. 观察者模式 观察者模式是一种常用的行为型模式,它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象。当主题对象发生变化时,会通知所有的观察者对象,使它们能够自动更新。以下是其中一种基于 Java 内置 Observer 接口的实现: ```java import java.util.Observable; import java.util.Observer; public class WeatherData extends Observable { private float temperature; private float humidity; private float pressure; public void measurementsChanged() { setChanged(); notifyObservers(); } public void setMeasurements(float temperature, float humidity, float pressure) { this.temperature = temperature; this.humidity = humidity; this.pressure = pressure; measurementsChanged(); } public float getTemperature() { return temperature; } public float getHumidity() { return humidity; } public float getPressure() { return pressure; } } public class CurrentConditionsDisplay implements Observer { private float temperature; private float humidity; public void display() { System.out.println("Current conditions: " + temperature + "F degrees and " + humidity + "% humidity"); } @Override public void update(Observable o, Object arg) { if (o instanceof WeatherData) { WeatherData weatherData = (WeatherData) o; this.temperature = weatherData.getTemperature(); this.humidity = weatherData.getHumidity(); display(); } } } ``` 4. 策略模式 策略模式是一种常用的行为型模式,它定义了一系列的算法,将每个算法封装起来,并使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户端。以下是其中一种基于接口和组合的实现: ```java public interface FlyBehavior { void fly(); } public class FlyWithWings implements FlyBehavior { @Override public void fly() { System.out.println("I'm flying with wings"); } } public class FlyNoWay implements FlyBehavior { @Override public void fly() { System.out.println("I can't fly"); } } public abstract class Duck { FlyBehavior flyBehavior; public void performFly() { flyBehavior.fly(); } public void setFlyBehavior(FlyBehavior flyBehavior) { this.flyBehavior = flyBehavior; } public abstract void display(); } public class MallardDuck extends Duck { public MallardDuck() { flyBehavior = new FlyWithWings(); } @Override public void display() { System.out.println("I'm a Mallard duck"); } } public class ModelDuck extends Duck { public ModelDuck() { flyBehavior = new FlyNoWay(); } @Override public void display() { System.out.println("I'm a Model duck"); } } ``` 以上是几种常见的设计模式及其详细教程,希望能对你有所帮助。当然,设计模式并不是万能的,需要根据具体情况选择合适的模式来解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值