设计模式-01

1 接口设计模式

  适用于:需要对一个类或一组类的方法进行定义或重定义的场景

package com.beifeng.hadoop.pattern.interfacee;
/**
 * @Description 接口定义
 */
public interface IPersonService {
    String getName();
    void sayHello();
}
package com.beifeng.hadoop.pattern.interfacee;
/**
 * @Description 接口实现类
 */
public class PersonServiceImpl implements IPersonService {
    public String getName() {
        return this.getClass().getName();
    }
    public void sayHello() {
        System.out.println("hello "+getName());
    }
}

2 适配器模式(adapter)

  设计目标:使用不同接口的类所提供的服务为客户端提供它所期望的接口
  使用场景:如果客户端已经提供了接口和实现类,但不能满足需要时,自定义一个新的类继承原实现类并实现接口
  2.2 分类:
     类适配器:新的适配器类实现需要的接口,并继承现有的类
    对象适配器(没有接口的情况):继承实现类,并在内部引用现有类, 如果适配类需要从多个对象中获取信息,通常也使用对象适配器

package com.beifeng.hadoop.pattern.adapter;
import com.beifeng.hadoop.pattern.interfacee.PersonServiceImpl;
/**
 * @Description 客户端实现类
 */
public class ClientPerServiceImpl extends PersonServiceImpl{
}
package com.beifeng.hadoop.pattern.adapter;
import com.beifeng.hadoop.pattern.interfacee.IPersonService;
/**
 * @Description 类适配器:继承现有实现类并实现接口
 */
public class ClassPersonServeiceImpl extends ClientPerServiceImpl
        implements IPersonService {
    public void showClient() {
        System.out.println("client is "+System.getProperty("os.name"));
    }
}
package com.beifeng.hadoop.pattern.adapter;
import com.beifeng.hadoop.pattern.interfacee.PersonServiceImpl;
/**
 * @Description 对象适配器:假如没有接口提供
 */
public class ObjectPersonServiceImpl extends PersonServiceImpl {
    private ClientPerServiceImpl clientPerServiceImpl;
    public ObjectPersonServiceImpl(ClientPerServiceImpl clientPerServiceImpl) {
        super();
        this.clientPerServiceImpl = clientPerServiceImpl;
    }
    @Override
    public String getName() {
        return clientPerServiceImpl.getName();
    }
    @Override
    public void sayHello() {
        System.out.println("client is "+System.getProperty("os.name"));
        clientPerServiceImpl.sayHello();
    }
}

3 外观模式 (facade)

  目标:简化工具包的使用,为子系统提供一个接口,便于使用
  实例程序:可以独立运行,却无法重用,仅用于演示使用子系统的方法
  外观类:可配置,可重用类,提供了高层次的接口,使得子系统使用更加方便。

4 合成模式(composite):一组对象的组合

  目标:为了保证客户端调用但对象和组合对象的一致性

  两个特征:

    1) 组对象允许包含单对象,也可以包含其他的组对象

    2 )  组合对象和单对象定义共同的行为

5 桥接模式(bridge)

  使用场景:某个类具有两个或两个以上的维度变化,如果只使用继承设计将会很臃肿,可以将继承关系改为耦合关系

6 观察者模式(observer)

  目标:在多个对象之间定义一对多的依赖关系,当一个对象的状态发生改变时,会通知依赖他的对象,并根据新状态做出相应的反应。

  实现步骤:被观察者中添加观察者列表,当被观察者发生变化时,调用方法,通知观察者列表中的所用观察者的方法

   主题接口(被观察者接口)的 3个基本操作:注册新的观察者,通知所有观察者更新数据,移除取消观察的观察者对象

/**主题接口:被观察者 3个基本操作:注册新的观察者,通知所有观察者更新数据,移除取消观察的观察者对象*/
public interface Subject {
    //注册观察者
    void registerObserver(Observer observer);
    //移除取消观察的观察者对象
    void removeOberver(Observer observer);
    //通知所用观察者
    void notifyObervers();
}
/**被观察者实现类,气象站 */
public class WeatherData implements Subject {
    //观察者列表
    private ArrayList<Observer> observers;
    private float temperature;//温度
    public WeatherData() {
        observers=new ArrayList<Observer>();
    }
    public void registerObserver(Observer observer) {
        observers.add(observer);
    }
    public void removeOberver(Observer observer) {
        int i=observers.indexOf(observer);
        if (i!=-1) {
            observers.remove(i);
        }
    }
    public void notifyObervers() {
        if (observers!=null&&observers.size()>0) {
            for(Observer observer:observers){
                observer.update(temperature);
            }
        }
    }
    public float getTemperature() {
        return temperature;
    }
    public void setTemperature(float temperature) {
        this.temperature = temperature;
        notifyObervers();
    }
}

7 调停者模式(mediator)

  设计目标:定义一个对象,封装一组对象的交互,从而降低对象间的耦合度,避免对象间的显示引用,而且可以独立地改变对象的行为。

  适用场景:多个对象彼此互相作用,可以创建一个中间对象,让该对象持有多个对象的引用,而多个对象持有中间对象的引用,此时,

        多个对象都称为同事对象,而中间对象称为调停者对象,当同事对象发生变化时可以,对用调停者对象通知要影响的同事对象

  实例:使用电脑来看电影

    在日常生活中,我们经常使用电脑来看电影,把这个过程描述出来,简化后假定会有如下的交互过程:

    (1)首先是光驱要读取光盘上的数据,然后告诉主板,它的状态改变了。

    (2)主板去得到光驱的数据,把这些数据交给CPU进行分析处理。

    (3)CPU处理完后,把数据分成了视频数据和音频数据,通知主板,它处理完了。

    (4)主板去得到CPU处理过后的数据,分别把数据交给显卡和声卡,去显示出视频和发出声音。

    要使用调停者模式来实现示例,那就要区分出同事对象和调停者对象。很明显,主板是调停者,而光驱、声卡、CPU、显卡等配件,都是作为同事对象。

时间: 2024-08-10 21:17:23

设计模式-01的相关文章

iOS.常用设计模式.01.单例模式

使用单例模式的类: UIApplication UIAccelerometer NSUserDefaults NSNotificationCenter NSFileManager NSBundle等 Singleton.h #import <Foundation/Foundation.h> @interface Singleton : NSObject // 始终返回同一个Singleton的指针 + (Singleton *)sharedManager; @property (strong,

设计模式01

设计模式01 Table of Contents 1 设计模式 1.1 基本原则 1.2 开-闭原则 1.2.1 与其他原则关系 1 设计模式 1.1 基本原则 系统的可扩展性由开-闭原则.里氏代换原则.依赖倒转原则.组合/聚合复用原则保证:系 统的灵活性由开-闭原则.迪米特原则.接口隔离原则保证:系统的可插入性由开-闭原 则.里氏代换原则.依赖倒转原则.组合/聚合复用原则保证. 当一个软件复用有道.易于维护,新功能加入到系统,或修改一个已有的功能将是容易 的,因此,代码高手就没有用武之地:而当

设计模式01: Singleton 单例模式

Singleton 单例模式 动机(Motivation)当进行软件开发是会有这样一种需求:在系统中只有存在一个实例才能确保它们的逻辑正确性.以及良好的效率.这应该是类设计者的责任,而不是使用者的责任. 意图(Intent)保证一个类仅有一个实例,并提供一个该实例的全局访问点.——<设计模式>GoF 单线程Singleton模型实现: 1 pulic class Singleton 2 { 3 private static Singleton instance;//如果客户不需要这个实例最好不

单例模式及常见写法分析(设计模式01)

保证一个类仅有一个实例,并提供一个该实例的全局访问点. --<设计模式> 单例模式的概念很简单,下面以C#语言为例子,列出常见单例写法的优缺点. 1.简单实现 public sealed class Singleton { static Singleton instance = null; public void Show() { Console.WriteLine( "instance function"); } private Singleton() { } publi

UML类图与面向对象设计原则&mdash;设计模式01

1. 引言     从大一开始学习编程,到如今也已经有两年了.从最初学习的Html,Js,JaveSe,再到JavaEE,Android,自己也能写一些玩具.学习过程中也无意识的了解了一些所谓的设计模式,如今打算系统的学习.学习以书<设计模式的艺术--软件开发人员内功修炼之道/刘伟著>为主.       所谓设计模式,即是前人对某类相似问题的抽象给出的解决方案.书中给出了23(Gof)+1(简单工厂模式)种设计模式.每种模式的学习将关注以下几点:名称(Name),问题(Problem),解决方

设计模式01(创建性设计模式)

简单列出这几个设计模式所包含的部分 1. 简单工厂模式 1.1 基类 1.2 方法类:通过基类,实现业务的方法类 1.3 业务类:根据业务传递过来的字符,判断需要创建对应的方法类 1.4 前台:前台调用业务类,传递1.3所需的字符 2.工厂模式 2.1 接口:创建统一的工厂操作接口(这个工厂需要生产的东西,比如对象,或者实现的方法) 2.2 基类 2.3 方法类:通过基类,实现业务的方法类, 2.4 业务类:将不用业务需要的字符,创建实现接口的业务类,业务类调用该业务的方法 2.5 前台:前台调

Java常用的设计模式01:设计模式的分类和原则

一.总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 二.设计模式的六大原则 1.开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭.在程序需要进行拓

设计模式01 创建型模式 - 抽象工厂

参考 1. 三种工厂模式的分析以及C++实现|博客园 2. 设计模式之三:抽象工厂模式 | CSDN 3. 浅谈Java设计模式--单实例.简单工厂.抽象工厂.观察者 | CSDN 抽象工厂 为创建一组相关或者相互依赖的对象提供一个接口,而无需指定他们具体的类. 通俗讲,就是创建工厂的工厂,每个工厂都实现抽象工厂,从而决定一个产品族:不同工厂生产不同产品族. 抽象工厂只关心接口,也就是工厂和产品之间的关系,工厂和用户之间的关系,而不关心产品如何实现,而Template和Builder Patte

设计模式01观察者模式(java)

先发代码,有空来写内容. observer1 1 import java.util.Observer; 2 import java.util.Observable; 3 4 //学生类(Student)继承Observable后变得可以被观察 5 class Student extends Observable{ 6 //属性 7 private String name; 8 private boolean isSleep = false; 9 private boolean isLate =