/**
* 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