设计模式

访问者模式实例

image

public abstract class Goods implements GoodsElement {
    public String name;

    public double cost;

    GoodsVisitor visitor;

    public abstract double discount();

    public void accept(GoodsVisitor visitor) {
        this.visitor = visitor;
    }
}

public class MilkGoods extends Goods {
    public MilkGoods(String name, double cost) {
        this.name=name;
        this.cost=cost;
    }

    @Override
    public double discount() {
        return visitor.milkDiscount(this);
    }
}

public class CherryGoods extends Goods {
    public CherryGoods(String name, double cost) {
        this.name=name;
        this.cost = cost;
    }

    @Override
    public double discount() {
        return visitor.cherryDiscount(this);
    }
}

public interface GoodsVisitor {
    double milkDiscount(Goods milk);

    double cherryDiscount(Goods cherry);
}

public class GoodsVisitor_5_30 implements GoodsVisitor {
    @Override
    public double milkDiscount(Goods milk) {
        return milk.cost * 0.9; // 九折
    }

    @Override
    public double cherryDiscount(Goods cherry) {
        if (cherry.cost < 300) { // 满减
            return cherry.cost;
        } else {
            return cherry.cost - 30;
        }
    }
}

public class MainClass {
    public static void main(String[] args) {
        GoodsVisitor visitor = new GoodsVisitor_5_30();
        MilkGoods milkGoods = new MilkGoods("牛奶", 100);
        milkGoods.accept(visitor);
        System.out.println(milkGoods.name + " " + milkGoods.discount());

        CherryGoods cherryGoods1 = new CherryGoods("樱桃", 300);
        cherryGoods1.accept(visitor);
        System.out.println(cherryGoods1.name + " " + cherryGoods1.discount());

        CherryGoods cherryGoods2 = new CherryGoods("樱桃", 299);
        cherryGoods2.accept(visitor);
        System.out.println(cherryGoods2.name + " " + cherryGoods2.discount());
    }
}

//输出:
//    牛奶 90.0
//    樱桃 270.0
//    樱桃 299.0
建造者模式

image

public interface Builder {
    void buildBoard();

    void buildDisplay();

    void buildOs();

    Computer build();
}

public class BuilderComputer implements Builder {

    private Computer mComputer = new Computer();

    @Override
    public void buildBoard() {
        mComputer.mBoard = "英特尔主板";
    }

    @Override
    public void buildDisplay() {
        mComputer.mDisplay = "Retina显示器";
    }

    @Override
    public void buildOs() {
        mComputer.mOs = "Mac OS X 12";
    }

    @Override
    public Computer build() {
        return mComputer;
    }
}

public class Computer {
    public String mBoard;
    public String mDisplay;
    public String mOs;
}

public class Director {
    private Builder mBuilser;

    public Director(Builder builer) {
        this.mBuilser = builer;
    }

    public void construct() {
        mBuilser.buildDisplay();
        mBuilser.buildBoard();
        mBuilser.buildOs();
    }
}

public class Test {
    public static void main(String[] args) {
        Builder builder = new BuilderComputer();
        Director pcDirector = new Director(builder);
        pcDirector.construct();

        Computer computer = builder.build();
        System.out.println("显示器名称:" + computer.mDisplay);
        System.out.println("主板名称:" + computer.mBoard);
        System.out.println("操作系统名称:" + computer.mOs);
    }
}

//输出:
//    显示器名称:Retina显示器
//    主板名称:英特尔主板
//    操作系统名称:Mac OS X 12
posted @ 2025-03-26 20:26  rbcd  阅读(11)  评论(0)    收藏  举报