Android的开发之&java23中设计模式------访问者模式

/**
 * Created by Administrator on 2017-10-12.
 * 商品项接口:两个方法等实现
 */

public interface GoodsItem {
    public double accept(ShoppingCartVisitor visitor);

    public ShoppingCartVisitor getSelfVisitor();
}



/**
 * Created by Administrator on 2017-10-12.
 * 购物接口
 */

public interface ShoppingCartVisitor {
    public double visitor(GoodsItem goodsItem);
}
/**
 * Created by Administrator on 2017-10-12.
 * 商品类,实现goodsItem接口
 */

public class Milk implements GoodsItem {
    private String brand;
    private double price;
    private int number;

    public Milk(String brand,double price,int number){
        this.brand=brand;
        this.price=price;
        this.number=number;
    }

    public int getNumber(){
        return number;
    }

    public String getBrand(){
        return brand;
    }

    public double getPrice(){
        return price;
    }


    @Override
    public double accept(ShoppingCartVisitor visitor) {
        return visitor.visitor(this);
    }

    @Override
    public ShoppingCartVisitor getSelfVisitor() {
        return new MilkVisitor();
    }
}
/**
 * Created by Administrator on 2017-10-12.
 * 增加奶粉Visitor
 */

public class MilkVisitor implements ShoppingCartVisitor {
    @Override
    public double visitor(GoodsItem goodsItem) {
        Milk milk= (Milk) goodsItem;
        double cost=milk.getPrice()*milk.getNumber();
        System.out.println(String.format("%s 单盒价:%s,盒数%s 总价:%s",milk.getBrand(),milk.getPrice(),milk.getNumber(),cost));
        //奶粉满300减50
        if (cost>=300){
            cost-=50;
        }
        System.out.println(String.format("%s 今日满300减50,优惠后总价:%s",milk.getBrand(),cost));
        return cost;
    }
}

/**
 * Created by Administrator on 2017-10-12.
 * 商品类,实现goodsItem接口
 */

public class Cherry implements GoodsItem {
    private double price;
    private int weight;

    public Cherry(double price,int weight){
        this.price=price;
        this.weight=weight;
    }

    public double getPrice(){
        return price;
    }

    public int getWeight(){
        return weight;
    }
    @Override
    public double accept(ShoppingCartVisitor visitor) {
        return visitor.visitor(this);
    }

    @Override
    public ShoppingCartVisitor getSelfVisitor() {
        return new CherryVisitor();
    }
}
public class CherryVisitor implements ShoppingCartVisitor {
    @Override
    public double visitor(GoodsItem goodsItem) {
        Cherry cherry= (Cherry) goodsItem;
        double cost=cherry.getPrice()*cherry.getWeight();
        System.out.println(String.format("Cherry 单价:%s 重量:%s 总价:%s",cherry.getPrice(),cherry.getWeight(),cost));
        //进口樱桃 8折
        cost*=0.8;
        System.out.println(String.format("Cherry 今日8折,折后总价%s",cost));
        return cost;
    }
}

public class ShoppingClient {
    private List<GoodsItem> list;

    public ShoppingClient(List<GoodsItem> list){
        this.list=list;
    }

    public List<GoodsItem> getList(){
        return list;
    }
    public void setList(List<GoodsItem> list){
        this.list=list;
    }

    public double perchase(){
        double costTotal=0.0;
        for (GoodsItem goodsItem : list){
            costTotal+=goodsItem.accept(goodsItem.getSelfVisitor());
        }
        return costTotal;
    }
}
/**
 * 访问者模式(Visitor)
 */
public class VisitorMethodActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_visitor_method);

        List<GoodsItem> list=new ArrayList<>();
        list.add(new Milk("牛奶",160.0,2));
        list.add(new Cherry(80.0,5));

        ShoppingClient shoppingClient=new ShoppingClient(list);
        double totalcost=shoppingClient.perchase();
        System.out.print(String.format("购物总价%s",totalcost));
    }
}
github地址:https://github.com/zyj18410105150/DesignMode


猜你喜欢

转载自blog.csdn.net/jie1123161402/article/details/78689322
今日推荐