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

2020-02-06  本文已影响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 优化一:简单工厂+抽象工厂

简单工厂+抽象工厂

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

上一篇 下一篇

猜你喜欢

热点阅读