日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 继承 模型_java – 画布形状模型的继承与组合?

發布時間:2025/3/20 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 继承 模型_java – 画布形状模型的继承与组合? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對于以下模型,您更喜歡繼承還是組合:

>我想在畫布上繪制對象,每個對象代表一個數據對象

>將其視為狀態機圖:橢圓表示狀態,線表示它們之間的連接/轉換.對象表示本身永遠不會改變,即狀態將始終由橢圓顯示.但是繪制橢圓的方式應該不同,例如,對于選擇,它應該具有不同的顏色,而拖動它應該具有alpha通道等.

從設計的角度來看,橢圓不是狀態,而線不是過渡.無論如何,將兩個對象組合起來以便能夠在List< Shape>中收集它們是合適的.并在每個對象上執行shape.draw().

現在有2個設計模型是可能的,而我認為2個類總是相同的:

interface Shape {

void draw();

}

abstract class Figure implements Shape {

//basic vars like start and end coordinates

int x0, y0, x1, y1;

}

遺產:

abstract class State extends Figure {

String name;

}

class Rectangle extends State {

@Override void draw();

}

class Line extends Figure;

class Transition extends Line

雖然從設計的角度來看,矩形不是狀態,而狀態不是圖形,但是關于繪圖上下文,這可能是可行的.因為我可以繼承處理形狀,繪圖等所需的大部分東西.

或組成:

abstract class State {

String name;

}

class Rectangle extends Figure {

private State state;

@Override void draw();

}

class Line extends Figure {

private Transition transition;

@Override void draw();

}

所以Rectangle Line將是我的對象的包裝器.

Rectangle和Line應該擴展State和Transition,還是包含它?

或者,也許還有一個我沒有看到的第三個設計選項.期待您的想法.

最佳答案 所以,這是我的想法,但對于大多數設計問題,很少有一個“正確”的答案.

就像你說的,狀態不是矩形,轉換不是直線.我們可以畫一條線和/或一個矩形,并且可能有一些優勢來對待它們.所以我可以將這些語句翻譯成一個簡單的設計:

public interface Drawable

{

public void draw();

public Position getPos();

}

public class Rectangle implements Drawable ...

public class Line implements Drawable ...

現在,State’s和Transition’s可以用這些Drawables來表示.你聽說過單一責任原則嗎?它基本上就是它聽起來的樣子,一個Object應該負責做一件“事情”.矩形和直線知道如何繪制自己.狀態和轉換可能在您的系統中還有其他工作要做.

public interface Figure

{

public Drawable getDrawable();

}

public class State implements Figure

{

private Rectangle rect;

public Drawable getDrawable() { return rect; }

//... State's real "work" below

}

public class Transition implements Figure

{

private Line line;

// you get the idea

}

在一個小/簡單的系統上,SRP的優點可能會丟失,但我們的想法是我們將渲染與其他系統邏輯分開.我們分離的功能越多,變更時間到來時系統就越不易碎.

總結

以上是生活随笔為你收集整理的java 继承 模型_java – 画布形状模型的继承与组合?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。