訪問者模式DEMO

使用java實(shí)現(xiàn)的訪問者模式的示例,對訪問者模式的對象結(jié)構(gòu)和操作分離的思想摸不透徹,敲下代碼,加深印象

public class VisitorMode {

    public static void main(String[] args) {
        AeraShapeVisitor aeraShapeVisitor = new AeraShapeVisitor();
        Shape circle = new Circle(10);
        circle.accept(aeraShapeVisitor);
        System.out.println("area = "+aeraShapeVisitor.getmArea());

        PerimeterShapeVisitor perimeterShapeVisitor = new PerimeterShapeVisitor();
        circle.accept(perimeterShapeVisitor);
        System.out.println("perimeter = "+perimeterShapeVisitor.getmPerimeter());

        Rectangle rectangle =new Rectangle(10,10);
        rectangle.accept(aeraShapeVisitor);
        System.out.println("area = "+aeraShapeVisitor.getmArea());

        rectangle.accept(perimeterShapeVisitor);
        System.out.println("perimeter = "+perimeterShapeVisitor.getmPerimeter());
    }

    private static interface ShapeVisitor{
        void visitor(Circle circle);
        void visitor(Rectangle circle);
    }

    private static class AeraShapeVisitor implements ShapeVisitor{
        private double mArea;
        @Override
        public void visitor(Circle circle) {
            mArea =  Math.PI * circle.mRadius * circle.mRadius;
        }

        @Override
        public void visitor(Rectangle rectangle) {
            mArea = rectangle.mHeight * rectangle.mHeight;
        }

        public double getmArea() {
            return mArea;
        }
    }

    private static class PerimeterShapeVisitor implements ShapeVisitor{
        private double mPerimeter;
        @Override
        public void visitor(Circle circle) {
            mPerimeter =  2 * Math.PI * circle.mRadius;
        }

        @Override
        public void visitor(Rectangle rectangle) {
            mPerimeter = 2 * (rectangle.mHeight + rectangle.mHeight);
        }

        public double getmPerimeter() {
            return mPerimeter;
        }
    }

    private static  interface Shape{
        void accept(ShapeVisitor visitor);
    }
    private static class Circle implements Shape{
        private int mRadius;

        public Circle(int mRadius) {
            this.mRadius = mRadius;
        }

        @Override
        public void accept(ShapeVisitor visitor) {
            visitor.visitor(this);
        }
    }

    private static class Rectangle implements Shape{
        private int mWidth;
        private int mHeight;

        public Rectangle(int mWidth, int mHeight) {
            this.mWidth = mWidth;
            this.mHeight = mHeight;
        }

        @Override
        public void accept(ShapeVisitor visitor) {
            visitor.visitor(this);
        }
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1 場景問題# 1.1 擴(kuò)展客戶管理的功能## 考慮這樣一個(gè)應(yīng)用:擴(kuò)展客戶管理的功能。 既然是擴(kuò)展功能,那么肯定是...
    七寸知架構(gòu)閱讀 3,042評論 1 58
  • 訪問者模式介紹 最復(fù)雜的設(shè)計(jì)模式,并且使用頻率不高,《設(shè)計(jì)模式》的作者評價(jià)為:大多情況下,你不需要使用訪問者模式,...
    JamFF閱讀 70,309評論 30 106
  • 目錄介紹 1.訪問者模式介紹2.訪問者模式定義3.訪問者模式UML圖4.訪問者模式簡單案例5.訪問者模式之Andr...
    楊充211閱讀 524評論 0 1
  • 使用場景 1.對象結(jié)構(gòu)比較穩(wěn)定,但經(jīng)常需要在次對象結(jié)構(gòu)上定義新的操作 需要對一個(gè)對象結(jié)構(gòu)中的對象進(jìn)行很多 不同的并...
    豎起大拇指閱讀 308評論 0 0
  • 訪問者模式(Visitor Pattern)訪問者模式是一種將數(shù)據(jù)操作和數(shù)據(jù)結(jié)構(gòu)分離的設(shè)計(jì)模式。這種類型的設(shè)計(jì)模式...
    涅槃快樂是金閱讀 679評論 0 0

友情鏈接更多精彩內(nèi)容