prototypePattern

  1. 原型模式
  2. 中介者模式

原型模式

原型模式就是使用对象的克隆的方法。clone()方法复制的是复杂对象的引用,包装类型的数据是复制的值

public class Prototype implements Cloneable{
    private Integer ref = 3;
    private int i = 2;
    private ArrayList<String> str = new ArrayList<String>();
    @Override
    protected Object clone() throws CloneNotSupportedException {
        Prototype o = (Prototype) super.clone();
        o.str = (ArrayList<String>)this.str.clone();
        return o;
    }

    public static void main(String[] args) {
        Prototype p = new Prototype();
        p.str.add("1");
        try {
           Prototype t = (Prototype) p.clone();
           t.ref = Integer.valueOf(2);
           t.str.add("clone");
            System.out.println(p.ref+p.str.toString());
            System.out.println(t.ref);
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
    }

中介者模式

中介公司就是中介者 还有个同事的角色
当多个对象间有复杂的业务逻辑时,可将此逻辑交由中介处理

//抽像基类 通过get set方式注入多个同事
public abstract class Mediator {
    protected ConcreteColleague concreteColleague;
    protected ConcreteColleague concreteColleagueTwo;
    abstract void signAggremeng();//到店签合同
    abstract void seeLicense();//看营业执照
}
//处理业务逻辑
public class ConcreteMediator extends Mediator {
    @Override
    void signAggremeng() {//同事方法
        super.concreteColleague.talk();
    }
    void seeLicense(){
        System.out.println("看营业执照");
    }
}
public abstract class Colleague {
    protected Mediator mediator;//同事必须有中介

    public Colleague(Mediator mediator) {
        this.mediator = mediator;
    }
}
public class ConcreteColleague extends Colleague {
    public ConcreteColleague(Mediator mediator) {
        super(mediator);
    }
    //同事私有
    public void talk(){
        System.out.println("商讨");
    }
    //委拖中介处理
    public void trust(){
        mediator.seeLicense();
    }
}

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 fulndon@qq.com

💰

×

Help us with donation