美文网首页
大话设计模式(5) --- 建造者模式|观察者模式|抽象工厂

大话设计模式(5) --- 建造者模式|观察者模式|抽象工厂

作者: 官子寒 | 来源:发表于2020-02-06 19:09 被阅读0次

1. 建造者模式

建造者模式适用于将一个复杂对象的构建与它的表示相分离,使得同样的构建过程可以创建不同的表示的意图时

public abstract class PersonBuilder {
    protected Color color;

    public PersonBuilder(Color color) {
        this.color = color;
    }

    public abstract void drawHead();
}
public class PersonThinBuilder extends PersonBuilder {
    public PersonThinBuilder (Color color) {
        super(color);
    }
    @Override
    public void drawHead() {
        System.out.println("ThinPerson Head");
    }
}
public class PersonDirector {
    PersonBuilder personBuilder;
    public PersonDirector(PersonBuilder pb) {
        this.personBuilder = pb;
    }
    public void createPerson() {
        personBuilder.drawHead();
    }
}
public class ClienDraw {
    public static void main(String[] args) {
        PersonDirector personDirector = new PersonDirector(new PersonThinBuilder(Color.BLACK));
        personDirector.createPerson();
    }
}
建造者模式

2. 观察者模式

观察者模式,定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有的观察者对象,使他们能够自己更新自己

  • 观察者模式让双方都依赖于抽象,而不是依赖于细节,从而使得双方的变化都不会影响到对方
  • 使用场景:当一个对象的改变需要同时改变其他对象时,而且他不知道有多少需要改变
  • 需要维护相关对象间的一致性
  • 当被通知者所需要调用的方法名不一样时,观察者模式不太方便
public abstract class Subject {
    abstract void  attach(Observer observer);
    abstract void detach(Observer observer);
    abstract void notifyColleagues();
}
public abstract class Observer {
    public String name;
    public Subject sub;
    public Observer(String name, Subject sub) {
        this.name = name;
        this.sub = sub;
    }
    
    public abstract void updateMyState();
}

import java.util.ArrayList;

public class Boss extends Subject {
    ArrayList<Observer> observerArrayList = new ArrayList<>();
    String myState = "老板来了";
    
    @Override
    void attach(Observer observer) {
        observerArrayList.add(observer);
    }

    @Override
    void detach(Observer observer) {
        observerArrayList.remove(observer);
    }

    @Override
    void notifyColleagues() {
        for(Observer o: observerArrayList) {
            System.out.println(o + myState);
        }
    }
}
public class Staff extends Observer {
    public Staff(String name, Subject sub) {
        super(name, sub);
    }

    @Override
    public void updateMyState() {
        System.out.println("已经收到通知");
    }
}
public class ObservationClient {
    public static void main(String[] args) {
        Boss boss = new Boss();
        boss.attach(new Staff("张三", boss));
        boss.myState = "老板回来了";
        boss.notifyColleagues();
    }
}
观察者模式 观察者模式

3. 抽象工厂模式

抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类

  • 改变一个应用的具体工厂十分容易,只需改变具体工厂即可使用不同的产品配置
  • 缺点:开发和修改需要改动很多类,增加了代码量
抽象工厂模式

3.1 优化一:简单工厂+抽象工厂

简单工厂+抽象工厂
  • DataAccess类中对具体的方法进行选择
  • 修改时在DataAccess中增加switch-case分支

3.2 优化二:反射+抽象工厂

相关文章

  • 设计模式系列-抽象工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 抽象工厂模式 抽象工厂模式 定义 抽象工...

  • 23种常规设计模式

    常规设计模式 设计模式概述 创建型模式:5单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式 结构型模式:7适...

  • 一文深入了解23种设计模式与六大原则的细枝末节 内含视频和文档

    23种设计模式 总体来说设计模式分为三大类: 创建型模式(5种):单例模式、工厂方法模式、抽象工厂模式、建造者模式...

  • 设计模式-工厂模式-原理剖析

    内容一:设计模式? 创建型模式->5种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式 结构型模式->...

  • 23种设计模式

    23种设计模式 一、创建型模式:(5种) 单例模式 抽象工厂模式 原型模式 建造者模式 工厂模式 二、结构型模式:...

  • Retrofit

    Retrofit设计模式 动态代理,装饰模式,建造者模式,抽象工厂模式,适配器模式 建造者模式创建Retrofit...

  • android常用设计模式

    26种设计模式 创建型设计模式[5] 单例模式,工厂模式,抽象工厂模式,建造模式,原型模式,[简单工厂模式] 结构...

  • 2021-11-16 - 学习记录

    设计模式学习:创建型:工厂(工厂方法,抽象工厂),建造者,单例,原型 设计模式:工厂模式 简单工厂 工厂方法 抽象工厂

  • iOS 命令模式

    设计模式分类 创建型模式->5种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式 结构型模式->7种:...

  • 设计模式学习

    设计模式分类 创建型模式(5种):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式; 结构型模式(7种)...

网友评论

      本文标题:大话设计模式(5) --- 建造者模式|观察者模式|抽象工厂

      本文链接:https://www.haomeiwen.com/subject/eeblzctx.html