Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Éè¼ÆÄ£Ê½Ñ§Ï°Ö®·ÃÎÊÕßģʽ
 
  À´Ô´£º²©¿Í  ·¢²¼ÓÚ£º2017-5-4
  2900  次浏览      28
 

·ÃÎÊÕßģʽ£¬ÊÇÐÐΪÐÍÉè¼ÆÄ£Ê½Ö®Ò»¡£·ÃÎÊÕßģʽÊÇÒ»ÖÖ½«Êý¾Ý²Ù×÷ÓëÊý¾Ý½á¹¹·ÖÀëµÄÉè¼ÆÄ£Ê½£¬Ëü¿ÉÒÔËãÊÇ 23 ÖÐÉè¼ÆÄ£Ê½ÖÐ×ÔÓµÄÒ»¸ö£¬µ«ËüµÄʹÓÃÆµÂʲ¢²»ÊǺܸߣ¬´ó¶àÊýÇé¿öÏ£¬Äã²¢²»ÐèҪʹÓ÷ÃÎÊÕßģʽ£¬µ«Êǵ±ÄãÒ»µ©ÐèҪʹÓÃËüʱ£¬ÄÇÄã¾ÍÊÇÐèҪʹÓÃËüÁË¡£

·ÃÎÊÕßģʽµÄ»ù±¾Ïë·¨ÊÇ£¬Èí¼þϵͳÖÐÓµÓÐÒ»¸öÓÉÐí¶à¶ÔÏ󹹳ɵġ¢±È½ÏÎȶ¨µÄ¶ÔÏó½á¹¹£¬ÕâЩ¶ÔÏóµÄÀà¶¼ÓµÓÐÒ»¸ö accept ·½·¨ÓÃÀ´½ÓÊÜ·ÃÎÊÕß¶ÔÏóµÄ·ÃÎÊ¡£·ÃÎÊÕßÊÇÒ»¸ö½Ó¿Ú£¬ËüÓµÓÐÒ»¸ö visit ·½·¨£¬Õâ¸ö·½·¨¶Ô·ÃÎʵ½µÄ¶ÔÏó½á¹¹Öв»Í¬ÀàÐ͵ÄÔªËØ×ö³ö²»Í¬µÄ´¦Àí¡£ÔÚ¶ÔÏó½á¹¹µÄÒ»´Î·ÃÎʹý³ÌÖУ¬ÎÒÃDZéÀúÕû¸ö¶ÔÏó½á¹¹£¬¶Ôÿһ¸öÔªËØ¶¼ÊµÊ© accept ·½·¨£¬ÔÚÿһ¸öÔªËØµÄ accept ·½·¨Öлáµ÷Ó÷ÃÎÊÕßµÄ visit ·½·¨£¬´Ó¶øÊ¹·ÃÎÊÕßµÃÒÔ´¦Àí¶ÔÏó½á¹¹µÄÿһ¸öÔªËØ£¬ÎÒÃÇ¿ÉÒÔÕë¶Ô¶ÔÏó½á¹¹Éè¼Æ²»Í¬µÄ·ÃÎÊÕßÀàÀ´Íê³É²»Í¬µÄ²Ù×÷£¬´ïµ½Çø±ð¶Ô´ýµÄЧ¹û¡£

¶¨Ò弰ʹÓó¡¾°

¶¨Ò壺·âװһЩ×÷ÓÃÓÚijÖÖÊý¾Ý½á¹¹Öеĸ÷ÔªËØµÄ²Ù×÷£¬Ëü¿ÉÒÔÔÚ²»¸Ä±äÕâ¸öÊý¾Ý½á¹¹µÄǰÌá϶¨Òå×÷ÓÃÓÚÕâÐ©ÔªËØµÄеIJÙ×÷¡£

¿ÉÒÔ¶Ô¶¨ÒåÕâôÀí½â£ºÓÐÕâôһ¸ö²Ù×÷£¬ËüÊÇ×÷ÓÃÓÚÒ»Ð©ÔªËØÖ®Éϵ쬶øÕâÐ©ÔªËØÊôÓÚijһ¸ö¶ÔÏó½á¹¹¡£Í¬Ê±Õâ¸ö²Ù×÷ÊÇÔÚ²»¸Ä±ä¸÷ÔªËØÀàµÄǰÌáÏ£¬ÔÚÕâ¸öǰÌá϶¨ÒåвÙ×÷ÊÇ·ÃÎÊÕßģʽ¾«ËèÖеľ«Ëè¡£

ʹÓó¡¾°£º

£¨1£©¶ÔÏó½á¹¹±È½ÏÎȶ¨£¬µ«¾­³£ÐèÒªÔڴ˶ÔÏó½á¹¹É϶¨ÒåеIJÙ×÷¡£

£¨2£©ÐèÒª¶ÔÒ»¸ö¶ÔÏó½á¹¹ÖеĶÔÏó½øÐкܶ಻ͬµÄÇÒ²»Ïà¹ØµÄ²Ù×÷£¬¶øÐèÒª±ÜÃâÕâЩ²Ù×÷¡°ÎÛȾ¡±ÕâЩ¶ÔÏóµÄÀ࣬Ҳ²»Ï£ÍûÔÚÔö¼ÓвÙ×÷ʱÐÞ¸ÄÕâЩÀà¡£

UMLͼ

£¨1£©Visitor£º½Ó¿Ú»òÕß³éÏóÀ࣬Ëü¶¨ÒåÁ˶Ôÿһ¸öÔªËØ£¨Element£©·ÃÎʵÄÐÐΪ£¬ËüµÄ²ÎÊý¾ÍÊÇ¿ÉÒÔ·ÃÎʵÄÔªËØ£¬ËüµÄ·½·¨ÊýÀíÂÛÉÏÀ´½²ÓëÔªËØ¸öÊýÊÇÒ»ÑùµÄ£¬Òò´Ë£¬·ÃÎÊÕßģʽҪÇóÔªËØµÄÀà×åÒªÎȶ¨£¬Èç¹û¾­³£Ìí¼Ó¡¢ÒƳýÔªËØÀ࣬±ØÈ»»áµ¼ÖÂÆµ·±µØÐÞ¸ÄVisitor½Ó¿Ú£¬Èç¹ûÕâÑùÔò²»ÊʺÏʹÓ÷ÃÎÊÕßģʽ¡£

£¨2£©ConcreteVisitor1¡¢ConcreteVisitor2£º¾ßÌåµÄ·ÃÎÊÀ࣬ËüÐèÒª¸ø³ö¶Ôÿһ¸öÔªËØÀà·ÃÎÊʱËù²úÉúµÄ¾ßÌåÐÐΪ¡£

£¨3£©Element£ºÔªËؽӿڻòÕß³éÏóÀ࣬Ëü¶¨ÒåÁËÒ»¸ö½ÓÊÜ·ÃÎÊÕߵķ½·¨£¨Accept£©£¬ÆäÒâÒåÊÇָÿһ¸öÔªËØ¶¼Òª¿ÉÒÔ±»·ÃÎÊÕß·ÃÎÊ¡£

£¨4£©ConcreteElementA¡¢ConcreteElementB£º¾ßÌåµÄÔªËØÀ࣬ËüÌṩ½ÓÊÜ·ÃÎÊ·½·¨µÄ¾ßÌåʵÏÖ£¬¶øÕâ¸ö¾ßÌåµÄʵÏÖ£¬Í¨³£Çé¿öÏÂÊÇʹÓ÷ÃÎÊÕßÌṩµÄ·ÃÎʸÃÔªËØÀàµÄ·½·¨¡£

£¨5£©ObjectStructure£º¶¨Òåµ±ÖÐËù˵µÄ¶ÔÏó½á¹¹£¬¶ÔÏó½á¹¹ÊÇÒ»¸ö³éÏó±íÊö£¬ËüÄÚ²¿¹ÜÀíÁËÔªËØ¼¯ºÏ£¬²¢ÇÒ¿ÉÒÔµü´úÕâÐ©ÔªËØ¹©·ÃÎÊÕß·ÃÎÊ¡£

·ÃÎÊÕßģʽµÄ¼òµ¥Àý×Ó

ÎÒÃǶ¼ÖªµÀ²ÆÎñ¶¼ÊÇÓÐÕ˱¾µÄ£¬Õâ¸öÕ˱¾¾Í¿ÉÒÔ×÷Ϊһ¸ö¶ÔÏó½á¹¹£¬¶øËüÆäÖеÄÔªËØÓÐÁ½ÖÖ£¬ÊÕÈëºÍÖ§³ö£¬ÕâÂú×ãÎÒÃÇ·ÃÎÊÕßģʽµÄÒªÇ󣬼´ÔªËصĸöÊýÊÇÎȶ¨µÄ£¬ÒòΪÕ˱¾ÖеÄÔªËØÖ»ÄÜÊÇÊÕÈëºÍÖ§³ö¡£

¶ø²é¿´Õ˱¾µÄÈË¿ÉÄÜÓÐÕâÑù¼¸ÖÖ£¬±ÈÈçÀϰ壬»á¼ÆÊÂÎñËùµÄ×¢»á£¬²ÆÎñÖ÷¹Ü£¬µÈµÈ¡£¶øÕâЩÈËÔÚ¿´Õ˱¾µÄʱºòÏÔȻĿµÄºÍÐÐΪÊDz»Í¬µÄ¡£

Ê×ÏÈÎÒÃǸø³öµ¥×ӵĽӿڣ¬ËüÖ»ÓÐÒ»¸ö·½·¨accept¡£

//µ¥¸öµ¥×ӵĽӿڣ¨Ï൱ÓÚElement£©
public interface Bill {

void accept(AccountBookViewer viewer);

}

ÆäÖеķ½·¨²ÎÊýAccountBookViewerÊÇÒ»¸öÕ˱¾·ÃÎÊÕß½Ó¿Ú£¬½ÓÏÂÀ´Ò²¾ÍÊÇʵÏÖÀ࣬ÊÕÈëµ¥×ÓºÍÏû·Ñµ¥×Ó£¬»òÕß˵ÊÕÈëºÍÖ§³öÀà¡£

//Ïû·ÑµÄµ¥×Ó
public class ConsumeBill implements Bill{

private double amount;

private String item;

public ConsumeBill(double amount, String item) {
super();
this.amount = amount;
this.item = item;
}

public void accept(AccountBookViewer viewer) {
viewer.view(this);
}

public double getAmount() {
return amount;
}

public String getItem() {
return item;
}

}

//ÊÕÈëµ¥×Ó
public class IncomeBill implements Bill{

private double amount;

private String item;

public IncomeBill(double amount, String item) {
super();
this.amount = amount;
this.item = item;
}

public void accept(AccountBookViewer viewer) {
viewer.view(this);
}

public double getAmount() {
return amount;
}

public String getItem() {
return item;
}

}

ÉÏÃæ×î¹Ø¼üµÄ»¹ÊÇÀïÃæµÄaccept·½·¨£¬ËüÖ±½ÓÈ÷ÃÎÊÕß·ÃÎÊ×Ô¼º£¬ÕâÏ൱ÓÚÒ»´Î¾²Ì¬·ÖÅÉ£¨ÎÄÕÂ×îºó½øÐнâÊÍ£©£¬µ±È»ÎÒÃÇÒ²¿ÉÒÔ²»Ê¹ÓÃÖØÔØ¶øÖ±½Ó¸ø·½·¨²»Í¬µÄÃû³Æ¡£

½ÓÏÂÀ´ÊÇÕ˱¾·ÃÎÊÕß½Ó¿Ú

//Õ˵¥²é¿´Õß½Ó¿Ú£¨Ï൱ÓÚVisitor£©
public interface AccountBookViewer {

//²é¿´Ïû·ÑµÄµ¥×Ó
void view(ConsumeBill bill);

//²é¿´ÊÕÈëµÄµ¥×Ó
void view(IncomeBill bill);

}

ÕâÁ½¸ö·½·¨ÊÇÖØÔØ·½·¨£¬¾ÍÊÇÔÚÉÏÃæµÄÔªËØÀ൱ÖÐÓõ½µÄ£¬µ±È»ÄãÒ²¿ÉÒÔ°´ÕÕ·ÃÎÊÕßģʽÀàͼµ±Öеķ½Ê½È¥×ö£¬½«Á½¸ö·½·¨·Ö±ðÃüÃûΪviewConsumeBillºÍviewIncomeBill£¬¶øÒ»°ã½¨Òé°´ÕÕÀàͼÉÏÀ´×öµÄ

·ÃÎÊÕßµÄʵÏÖ

//ÀϰåÀ࣬²é¿´Õ˱¾µÄÀàÖ®Ò»
public class Boss implements AccountBookViewer{

private double totalIncome;

private double totalConsume;

//ÀϰåÖ»¹Ø×¢Ò»¹²»¨Á˶àÉÙÇ®ÒÔ¼°Ò»¹²ÊÕÈë¶àÉÙÇ®£¬ÆäÓಢ²»¹ØÐÄ
public void view(ConsumeBill bill) {
totalConsume += bill.getAmount();
}

public void view(IncomeBill bill) {
totalIncome += bill.getAmount();
}

public double getTotalIncome() {
System.out.println("Àϰå²é¿´Ò»¹²ÊÕÈë¶àÉÙ£¬ÊýÄ¿ÊÇ£º" + totalIncome);
return totalIncome;
}

public double getTotalConsume() {
System.out.println("Àϰå²é¿´Ò»¹²»¨·Ñ¶àÉÙ£¬ÊýÄ¿ÊÇ£º" + totalConsume);
return totalConsume;
}

}

//×¢²á»á¼ÆÊ¦À࣬²é¿´Õ˱¾µÄÀàÖ®Ò»
public class CPA implements AccountBookViewer{

//×¢»áÔÚ¿´Õ˱¾Ê±£¬Èç¹ûÊÇÖ§³ö£¬ÔòÈç¹ûÖ§³öÊǹ¤×Ê£¬ÔòÐèÒª¿´Ó¦¸Ã½»µÄ˰½»ÁËû
public void view(ConsumeBill bill) {
if (bill.getItem().equals("¹¤×Ê")) {
System.out.println("×¢»á²é¿´¹¤×ÊÊÇ·ñ½»¸öÈËËùµÃ˰¡£");
}
}
//Èç¹ûÊÇÊÕÈ룬ÔòËùÓеÄÊÕÈë¶¼Òª½»Ë°
public void view(IncomeBill bill) {
System.out.println("×¢»á²é¿´ÊÕÈ뽻˰ÁËû¡£");
}

}

ÀϰåÖ»¹ØÐÄÊÕÈëºÍÖ§³öµÄ×ܶ¶ø×¢»áÖ»¹Ø×¢¸Ã½»Ë°µÄÊÇ·ñ½»Ë°

½ÓÏÂÀ´ÊÇÕ˱¾À࣬ËüÊǵ±Ç°·ÃÎÊÕßģʽÀý×ÓÖеĶÔÏó½á¹¹

//Õ˱¾ÀࣨÏ൱ÓÚObjectStruture£©
public class AccountBook {
//µ¥×ÓÁбí
private List<Bill> billList = new ArrayList<Bill>();
//Ìí¼Óµ¥×Ó
public void addBill(Bill bill){
billList.add(bill);
}
//¹©Õ˱¾µÄ²é¿´Õ߲鿴Õ˱¾
public void show(AccountBookViewer viewer){
for (Bill bill : billList) {
bill.accept(viewer);
}
}
}

Õ˱¾À൱ÖÐÓÐÒ»¸öÁÐ±í£¬Õâ¸öÁбíÊÇÔªËØ£¨Bill£©µÄ¼¯ºÏ£¬Õâ±ãÊǶÔÏó½á¹¹µÄͨ³£±íʾ£¬ËüÒ»°ã»áÊÇÒ»¶ÑÔªËØµÄ¼¯ºÏ£¬²»¹ýÕâ¸ö¼¯ºÏ²»Ò»¶¨ÊÇÁÐ±í£¬Ò²¿ÉÄÜÊÇÊ÷£¬Á´±íµÈµÈÈκÎÊý¾Ý½á¹¹£¬ÉõÖÁÊÇÈô¸É¸öÊý¾Ý½á¹¹¡£ÆäÖÐshow·½·¨£¬¾ÍÊÇÕ˱¾ÀàµÄ¾«Ë裬Ëü»áö¾Ùÿһ¸öÔªËØ£¬È÷ÃÎÊÕß·ÃÎÊ¡£

²âÊÔ¿Í»§¶Ë

public class Client {

public static void main(String[] args) {
AccountBook accountBook = new AccountBook();
//Ìí¼ÓÁ½ÌõÊÕÈë
accountBook.addBill(new IncomeBill(10000, "ÂôÉÌÆ·"));
accountBook.addBill(new IncomeBill(12000, "Âô¹ã¸æÎ»"));
//Ìí¼ÓÁ½ÌõÖ§³ö
accountBook.addBill(new ConsumeBill(1000, "¹¤×Ê"));
accountBook.addBill(new ConsumeBill(2000, "²ÄÁÏ·Ñ"));

AccountBookViewer boss = new Boss();
AccountBookViewer cpa = new CPA();

//Á½¸ö·ÃÎÊÕß·Ö±ð·ÃÎÊÕ˱¾
accountBook.show(cpa);
accountBook.show(boss);

((Boss) boss).getTotalConsume();
((Boss) boss).getTotalIncome();
}
}

ÉÏÃæµÄ´úÂëÖУ¬¿ÉÒÔÕâôÀí½â£¬Õ˱¾ÒÔ¼°Õ˱¾ÖеÄÔªËØÊǷdz£Îȶ¨µÄ£¬ÕâЩ¼¸ºõ²»¿ÉÄܸı䣬¶ø×îÈÝÒ׸ıäµÄ¾ÍÊÇ·ÃÎÊÕßÕⲿ·Ö¡£

·ÃÎÊÕßģʽ×î´óµÄÓŵã¾ÍÊÇÔö¼Ó·ÃÎÊÕ߷dz£ÈÝÒ×£¬ÎÒÃÇ´Ó´úÂëÉÏÀ´¿´£¬Èç¹ûÒªÔö¼ÓÒ»¸ö·ÃÎÊÕߣ¬ÄãÖ»ÐèÒª×öÒ»¼þʼ´¿É£¬ÄǾÍÊÇдһ¸öÀ࣬ʵÏÖAccountBookViewer½Ó¿Ú£¬È»ºó¾Í¿ÉÒÔÖ±½Óµ÷ÓÃAccountBookµÄshow·½·¨È¥·ÃÎÊÕ˱¾ÁË¡£

Èç¹ûûʹÓ÷ÃÎÊÕßģʽ£¬Ò»¶¨»áÔö¼ÓÐí¶àif else£¬¶øÇÒÿÔö¼ÓÒ»¸ö·ÃÎÊÕߣ¬Äã¶¼ÐèÒª¸ÄÄãµÄif else£¬´úÂë»áÏԵ÷dz£Ó·Ö×£¬¶øÇҷdz£ÄÑÒÔÀ©Õ¹ºÍά»¤¡£

¾²Ì¬·ÖÅÉÒÔ¼°¶¯Ì¬·ÖÅÉ

±äÁ¿±»ÉùÃ÷ʱµÄÀàÐͽÐ×ö±äÁ¿µÄ¾²Ì¬ÀàÐÍ(Static Type)£¬ÓÐЩÈËÓְѾ²Ì¬ÀàÐͽÐ×öÃ÷ÏÔÀàÐÍ(Apparent Type)£»¶ø±äÁ¿ËùÒýÓõĶÔÏóµÄÕæÊµÀàÐÍÓÖ½Ð×ö±äÁ¿µÄʵ¼ÊÀàÐÍ(Actual Type)¡£±ÈÈ磺

List list = null;
list = new ArrayList();

ÉùÃ÷ÁËÒ»¸ö±äÁ¿list£¬ËüµÄ¾²Ì¬ÀàÐÍ£¨Ò²½ÐÃ÷ÏÔÀàÐÍ£©ÊÇList£¬¶øËüµÄʵ¼ÊÀàÐÍÊÇArrayList¡£¸ù¾Ý¶ÔÏóµÄÀàÐͶø¶Ô·½·¨½øÐеÄÑ¡Ôñ£¬¾ÍÊÇ·ÖÅÉ(Dispatch)£¬·ÖÅÉ(Dispatch)ÓÖ·ÖΪÁ½ÖÖ£¬¼´¾²Ì¬·ÖÅɺͶ¯Ì¬·ÖÅÉ¡£¾²Ì¬·ÖÅÉ(Static Dispatch)·¢ÉúÔÚ±àÒëʱÆÚ£¬·ÖÅɸù¾Ý¾²Ì¬ÀàÐÍÐÅÏ¢·¢Éú¡£

¾²Ì¬·ÖÅÉ

¾²Ì¬·ÖÅɾÍÊǰ´ÕÕ±äÁ¿µÄ¾²Ì¬ÀàÐͽøÐзÖÅÉ£¬´Ó¶øÈ·¶¨·½·¨µÄÖ´Ðа汾£¬¾²Ì¬·ÖÅÉÔÚ±àÒëʱÆÚ¾Í¿ÉÒÔÈ·¶¨·½·¨µÄ°æ±¾¡£¶ø¾²Ì¬·ÖÅÉ×îµäÐ͵ÄÓ¦ÓþÍÊÇ·½·¨

ÖØÔØ

public class Main {

public void test(String string){
System.out.println("string");
}

public void test(Integer integer){
System.out.println("integer");
}

public static void main(String[] args) {
String string = "1";
Integer integer = 1;
Main main = new Main();
main.test(integer);
main.test(string);
}
}

ÔÚ¾²Ì¬·ÖÅÉÅжϵÄʱºò£¬ÎÒÃǸù¾Ý¶à¸öÅжÏÒÀ¾Ý£¨¼´²ÎÊýÀàÐͺ͸öÊý£©ÅжϳöÁË·½·¨µÄ°æ±¾£¬ÄÇôÕâ¸ö¾ÍÊǶà·ÖÅɵĸÅÄÒòΪÎÒÃÇÓÐÒ»¸öÒÔÉϵĿ¼Á¿±ê×¼£¬Ò²¿ÉÒÔ³ÆÎª×ÚÁ¿¡£ËùÒÔJavaÊǾ²Ì¬¶à·ÖÅɵÄÓïÑÔ¡£

¶¯Ì¬·ÖÅÉ

¶ÔÓÚ¶¯Ì¬·ÖÅÉ£¬Ó뾲̬Ïà·´£¬Ëü²»ÊÇÔÚ±àÒëÆÚÈ·¶¨µÄ·½·¨°æ±¾£¬¶øÊÇÔÚÔËÐÐʱ²ÅÄÜÈ·¶¨¡£¶ø¶¯Ì¬·ÖÅÉ×îµäÐ͵ÄÓ¦ÓþÍÊǶà̬µÄÌØÐÔ

interface Person{
void test();
}
class Man implements Person{
public void test(){
System.out.println("ÄÐÈË");
}
}
class Woman implements Person{
public void test(){
System.out.println("Å®ÈË");
}
}
public class Main {

public static void main(String[] args) {
Person man = new Man();
Person woman = new Woman();
man.test();
woman.test();
}
}

Õâ¶Î³ÌÐòÊä³ö½á¹ûΪÒÀ´Î´òÓ¡ÄÐÈ˺ÍÅ®ÈË£¬È»¶øÕâÀïµÄtest·½·¨°æ±¾£¬¾ÍÎÞ·¨¸ù¾ÝmanºÍwomanµÄ¾²Ì¬ÀàÐÍÈ¥ÅжÏÁË£¬ËûÃǵľ²Ì¬ÀàÐͶ¼ÊÇPerson½Ó¿Ú£¬¸ù±¾ÎÞ´ÓÅжϡ£

ÏÔÈ»£¬²úÉúµÄÊä³ö½á¹û£¬¾ÍÊÇÒòΪtest·½·¨µÄ°æ±¾ÊÇÔÚÔËÐÐʱÅжϵģ¬Õâ¾ÍÊǶ¯Ì¬·ÖÅÉ¡£

¶¯Ì¬·ÖÅÉÅжϵķ½·¨ÊÇÔÚÔËÐÐʱ»ñÈ¡µ½manºÍwomanµÄʵ¼ÊÒýÓÃÀàÐÍ£¬ÔÙÈ·¶¨·½·¨µÄ°æ±¾£¬¶øÓÉÓÚ´ËʱÅжϵÄÒÀ¾ÝÖ»ÊÇʵ¼ÊÒýÓÃÀàÐÍ£¬Ö»ÓÐÒ»¸öÅжÏÒÀ¾Ý£¬ËùÒÔÕâ¾ÍÊǵ¥·ÖÅɵĸÅÄÕâʱÎÒÃǵĿ¼Á¿±ê×¼Ö»ÓÐÒ»¸ö×ÚÁ¿£¬¼´±äÁ¿µÄʵ¼ÊÒýÓÃÀàÐÍ¡£ÏàÓ¦µÄ£¬Õâ˵Ã÷JAVAÊǶ¯Ì¬µ¥·ÖÅɵÄÓïÑÔ¡£

·ÃÎÊÕßģʽÖеÄα¶¯Ì¬Ë«·ÖÅÉ

·ÃÎÊÕßģʽÖÐʹÓõÄÊÇα¶¯Ì¬Ë«·ÖÅÉ£¬ËùνµÄ¶¯Ì¬Ë«·ÖÅɾÍÊÇÔÚÔËÐÐʱÒÀ¾ÝÁ½¸öʵ¼ÊÀàÐÍÈ¥ÅжÏÒ»¸ö·½·¨µÄÔËÐÐÐÐΪ£¬¶ø·ÃÎÊÕßģʽʵÏÖµÄÊÖ¶ÎÊǽøÐÐÁËÁ½´Î¶¯Ì¬µ¥·ÖÅÉÀ´´ïµ½Õâ¸öЧ¹û¡£

»Øµ½ÉÏÃæÀý×Óµ±ÖÐÕ˱¾ÀàÖеÄaccept·½·¨

for (Bill bill : billList) {
bill.accept(viewer);
}

ÕâÀï¾ÍÊÇÒÀ¾ÝbiilºÍviewerÁ½¸öʵ¼ÊÀàÐ;ö¶¨ÁËview·½·¨µÄ°æ±¾£¬´Ó¶ø¾ö¶¨ÁËaccept·½·¨µÄ¶¯×÷¡£

·ÖÎöaccept·½·¨µÄµ÷Óùý³Ì

1.µ±µ÷ÓÃaccept·½·¨Ê±£¬¸ù¾ÝbillµÄʵ¼ÊÀàÐ;ö¶¨Êǵ÷ÓÃConsumeBill»¹ÊÇIncomeBillµÄaccept·½·¨¡£

2.Õâʱaccept·½·¨µÄ°æ±¾ÒѾ­È·¶¨£¬¼ÙÈçÊÇConsumeBill£¬ËüµÄaccept·½·¨Êǵ÷ÓÃÏÂÃæÕâÐдúÂë¡£

 public void accept(AccountBookViewer viewer) {
viewer.view(this);
}

´ËʱµÄthisÊÇConsumeBillÀàÐÍ£¬ËùÒÔ¶ÔÓ¦ÓÚAccountBookViewer½Ó¿ÚµÄview(ConsumeBill bill)·½·¨£¬´ËʱÐèÒªÔÙ¸ù¾ÝviewerµÄʵ¼ÊÀàÐÍÈ·¶¨view·½·¨µÄ°æ±¾£¬Èç´ËÒ»À´£¬¾ÍÍê³ÉÁ˶¯Ì¬Ë«·ÖÅɵĹý³Ì¡£

ÒÔÉϵĹý³Ì¾ÍÊÇͨ¹ýÁ½´Î¶¯Ì¬Ë«·ÖÅÉ£¬µÚÒ»´Î¶Ôaccept·½·¨½øÐж¯Ì¬·ÖÅÉ£¬µÚ¶þ´Î¶Ôview£¨ÀàͼÖеÄvisit·½·¨£©·½·¨½øÐж¯Ì¬·ÖÅÉ£¬´Ó¶ø´ïµ½Á˸ù¾ÝÁ½¸öʵ¼ÊÀàÐÍÈ·¶¨Ò»¸ö·½·¨µÄÐÐΪµÄЧ¹û¡£

¶øÔ­±¾ÎÒÃǵÄ×ö·¨£¬Í¨³£ÊÇ´«ÈëÒ»¸ö½Ó¿Ú£¬Ö±½ÓʹÓøýӿڵķ½·¨£¬´ËΪ¶¯Ì¬µ¥·ÖÅÉ£¬¾ÍÏñ²ßÂÔģʽһÑù¡£ÔÚÕâÀshow·½·¨´«ÈëµÄviewer½Ó¿Ú²¢²»ÊÇÖ±½Óµ÷ÓÃ×Ô¼ºµÄview·½·¨£¬¶øÊÇͨ¹ýbillµÄʵ¼ÊÀàÐÍÏȶ¯Ì¬·ÖÅÉÒ»´Î£¬È»ºóÔÚ·ÖÅɺóÈ·¶¨µÄ·½·¨°æ±¾ÀïÔÙ½øÐÐ×Ô¼ºµÄ¶¯Ì¬·ÖÅÉ¡£

×¢Ò⣺ÕâÀïÈ·¶¨view(ConsumeBill bill)·½·¨ÊǾ²Ì¬·ÖÅɾö¶¨µÄ£¬ËùÒÔÕâ¸ö²¢²»Ôڴ˴ζ¯Ì¬Ë«·ÖÅɵķ¶³ëÄÚ£¬¶øÇÒ¾²Ì¬·ÖÅÉÊÇÔÚ±àÒëÆÚ¾ÍÍê³ÉµÄ£¬ËùÒÔview(ConsumeBill bill)·½·¨µÄ¾²Ì¬·ÖÅÉÓë·ÃÎÊÕßģʽµÄ¶¯Ì¬Ë«·ÖÅɲ¢Ã»ÓÐÈκιØÏµ¡£¶¯Ì¬Ë«·ÖÅÉ˵µ½µ×»¹ÊǶ¯Ì¬·ÖÅÉ£¬ÊÇÔÚÔËÐÐʱ·¢ÉúµÄ£¬ËüÓ뾲̬·ÖÅÉÓÐ×ű¾ÖÊÉϵÄÇø±ð£¬²»¿ÉÒÔ˵һ´Î¶¯Ì¬·ÖÅɼÓÒ»´Î¾²Ì¬·ÖÅɾÍÊǶ¯Ì¬Ë«·ÖÅÉ£¬¶øÇÒ·ÃÎÊÕßģʽµÄË«·ÖÅɱ¾ÉíÒ²ÊÇÁíÓÐËùÖ¸¡£

ÕâÀïµÄthisµÄÀàÐͲ»ÊǶ¯Ì¬È·¶¨µÄ£¬ÄãдÔÚÄĸöÀ൱ÖУ¬ËüµÄ¾²Ì¬ÀàÐ;ÍÊÇÄĸöÀ࣬ÕâÊÇÔÚ±àÒëÆÚ¾ÍÈ·¶¨µÄ£¬²»È·¶¨µÄÊÇËüµÄʵ¼ÊÀàÐÍ£¬Çë¸÷Î»Çø·Ö¿ªÕâÒ»µã¡£

¶Ô·ÃÎÊÕßģʽµÄһЩ˼¿¼

¼ÙÉèÎÒÃÇÉÏÃæµÄÀý×Óµ±ÖÐÔÙÌí¼ÓÒ»¸ö²ÆÎñÖ÷¹Ü£¬¶ø²ÆÎñÖ÷¹Ü²»¹ÜÄãÊÇÖ§³ö»¹ÊÇÊÕÈ룬¶¼ÒªÏêϸµÄ²é¿´ÄãµÄµ¥×ÓµÄÏîÄ¿ÒÔ¼°½ð¶î£¬¼òµ¥µã˵¾ÍÊDzÆÎñÖ÷¹ÜÀàµÄÁ½¸öview·½·¨µÄ´úÂëÊÇÒ»ÑùµÄ¡£

ÕâÀïµÄ½«Á½¸öview·½·¨³éÈ¡µÄ·½°¸ÊÇ£¬ÎÒÃÇ¿ÉÒÔ½«ÔªËØÌáÁ¶³ö²ã´Î½á¹¹£¬Õë¶Ô²ã´Î½á¹¹Ìṩ²Ù×÷µÄ·½·¨£¬ÕâÑù¾ÍʵÏÖÁËÓŵ㵱ÖÐ×îºóÁ½µãÌáµ½µÄÕë¶Ô²ã´Î¶¨Òå²Ù×÷ÒÔ¼°¿çÔ½²ã´Î¶¨Òå²Ù×÷¡£

//µ¥¸öµ¥×ӵĽӿڣ¨Ï൱ÓÚElement£©
public interface Bill {

void accept(Viewer viewer);

}

//³éÏóµ¥×ÓÀ࣬һ¸ö¸ß²ã´ÎµÄµ¥×Ó³éÏó
public abstract class AbstractBill implements Bill{

protected double amount;

protected String item;

public AbstractBill(double amount, String item) {
super();
this.amount = amount;
this.item = item;
}

public double getAmount() {
return amount;
}

public String getItem() {
return item;
}

}

//ÊÕÈëµ¥×Ó
public class IncomeBill extends AbstractBill{

public IncomeBill(double amount, String item) {
super(amount, item);
}

public void accept(Viewer viewer) {
if (viewer instanceof AbstractViewer) {
((AbstractViewer)viewer).viewIncomeBill(this);
return;
}
viewer.viewAbstractBill(this);
}

}

//Ïû·ÑµÄµ¥×Ó
public class ConsumeBill extends AbstractBill{

public ConsumeBill(double amount, String item) {
super(amount, item);
}

public void accept(Viewer viewer) {
if (viewer instanceof AbstractViewer) {
((AbstractViewer)viewer).viewConsumeBill(this);
return;
}
viewer.viewAbstractBill(this);
}

}

ÕâÊÇÔªËØÀàµÄ²ã´Î½á¹¹£¬¿ÉÒÔ¿´µ½£¬ÎÒÃǵÄacceptµ±ÖгöÏÖÁËifÅжϣ¬ÕâÀïµÄÅжÏÊÇÔÚÅжÏÒ»¸ö²ã´Î£¬Õâ¶Î´úÂëÊDz»»á±»¸ü¸ÄµÄ¡£

·ÃÎÊÕß²ã´Î

//³¬¼¶·ÃÎÊÕß½Ó¿Ú£¨ËüÖ§³Ö¶¨Òå¸ß²ã²Ù×÷£©
public interface Viewer{

void viewAbstractBill(AbstractBill bill);

}

//±ÈViewer½Ó¿ÚµÍÒ»¸ö²ã´ÎµÄ·ÃÎÊÕß½Ó¿Ú
public abstract class AbstractViewer implements Viewer{

//²é¿´Ïû·ÑµÄµ¥×Ó
abstract void viewConsumeBill(ConsumeBill bill);

//²é¿´ÊÕÈëµÄµ¥×Ó
abstract void viewIncomeBill(IncomeBill bill);

public final void viewAbstractBill(AbstractBill bill){}
}

//ÀϰåÀ࣬²é¿´Õ˱¾µÄÀàÖ®Ò»£¬×÷ÓÃÓÚ×îµÍ²ã´Î½á¹¹
public class Boss extends AbstractViewer{

private double totalIncome;

private double totalConsume;

//ÀϰåÖ»¹Ø×¢Ò»¹²»¨Á˶àÉÙÇ®ÒÔ¼°Ò»¹²ÊÕÈë¶àÉÙÇ®£¬ÆäÓಢ²»¹ØÐÄ
public void viewConsumeBill(ConsumeBill bill) {
totalConsume += bill.getAmount();
}

public void viewIncomeBill(IncomeBill bill) {
totalIncome += bill.getAmount();
}

public double getTotalIncome() {
System.out.println("Àϰå²é¿´Ò»¹²ÊÕÈë¶àÉÙ£¬ÊýÄ¿ÊÇ£º" + totalIncome);
return totalIncome;
}

public double getTotalConsume() {
System.out.println("Àϰå²é¿´Ò»¹²»¨·Ñ¶àÉÙ£¬ÊýÄ¿ÊÇ£º" + totalConsume);
return totalConsume;
}

}

//×¢²á»á¼ÆÊ¦À࣬²é¿´Õ˱¾µÄÀàÖ®Ò»£¬×÷ÓÃÓÚ×îµÍ²ã´Î½á¹¹
public class CPA extends AbstractViewer{

//×¢»áÔÚ¿´Õ˱¾Ê±£¬Èç¹ûÊÇÖ§³ö£¬ÔòÈç¹ûÖ§³öÊǹ¤×Ê£¬ÔòÐèÒª¿´Ó¦¸Ã½»µÄ˰½»ÁËû
public void viewConsumeBill(ConsumeBill bill) {
if (bill.getItem().equals("¹¤×Ê")) {
System.out.println("×¢»á²é¿´ÊÇ·ñ½»¸öÈËËùµÃ˰¡£");
}
}
//Èç¹ûÊÇÊÕÈ룬ÔòËùÓеÄÊÕÈë¶¼Òª½»Ë°
public void viewIncomeBill(IncomeBill bill) {
System.out.println("×¢»á²é¿´ÊÕÈ뽻˰ÁËû¡£");
}

}

//²ÆÎñÖ÷¹ÜÀ࣬²é¿´Õ˱¾µÄÀàÖ®Ò»£¬×÷ÓÃÓڸ߲ãµÄ²ã´Î½á¹¹
public class CFO implements Viewer {

//²ÆÎñÖ÷¹Ü¶Ôÿһ¸öµ¥×Ó¶¼ÒªºË¶ÔÏîÄ¿ºÍ½ð¶î
public void viewAbstractBill(AbstractBill bill) {
System.out.println("²ÆÎñÖ÷¹Ü²é¿´Õ˱¾Ê±£¬Ã¿Ò»¸ö¶¼ºË¶ÔÏîÄ¿ºÍ½ð¶î£¬½ð¶îÊÇ" + bill.getAmount() + "£¬ÏîÄ¿ÊÇ" + bill.getItem());
}

}

²ÆÎñÖ÷¹Ü£¨CFO£©ÊÇÕë¶ÔAbstractBillÕâÒ»²ã¶¨ÒåµÄ²Ù×÷£¬¶øÔ­À´µÄÀϰ壨Boss£©ºÍ×¢²á»á¼ÆÊ¦£¨CPA£©¶¼ÊÇÕë¶ÔConsumeBillºÍIncomeBillÕâÒ»²ã¶¨ÒåµÄ²Ù×÷£¬ÕâʱÒѾ­²úÉúÁË¿çÔ½²ã´Î½á¹¹µÄÐÐΪ£¬ÀϰåºÍ×¢²á»á¼ÆÊ¦¶¼¿ç¹ýÁ˳éÏóµ¥×ÓÕâÒ»²ã£¬Ö±½ÓÕë¶Ô¾ßÌåµÄµ¥×Ó¶¨Òå²Ù×÷¡£

Õ˱¾ÀàûÓб仯£¬×îºó¿´¿Í»§¶ËµÄʹÓÃ

public class Client {

public static void main(String[] args) {
AccountBook accountBook = new AccountBook();
//Ìí¼ÓÁ½ÌõÊÕÈë
accountBook.addBill(new IncomeBill(10000, "ÂôÉÌÆ·"));
accountBook.addBill(new IncomeBill(12000, "Âô¹ã¸æÎ»"));
//Ìí¼ÓÁ½ÌõÖ§³ö
accountBook.addBill(new ConsumeBill(1000, "¹¤×Ê"));
accountBook.addBill(new ConsumeBill(2000, "²ÄÁÏ·Ñ"));

Viewer boss = new Boss();
Viewer cpa = new CPA();
Viewer cfo = new CFO();

//Á½¸ö·ÃÎÊÕß·Ö±ð·ÃÎÊÕ˱¾
accountBook.show(cpa);
accountBook.show(boss);
accountBook.show(cfo);

((Boss) boss).getTotalConsume();
((Boss) boss).getTotalIncome();
}
}

»ØÏëһϣ¬ÒªÊÇÔÙ³öÏֺͲÆÎñÖ÷¹ÜÒ»Ñù¶ÔËùÓе¥×Ó¶¼ÊÇÒ»Ñù²Ù×÷µÄÈË£¬ÎÒÃǾͲ»ÐèÒª¸´ÖÆ´úÂëÁË£¬Ö»ÐèÒªÈÃËûʵÏÖViewer½Ó¿Ú¾Í¿ÉÒÔÁË£¬¶øÈç¹ûÒªÏñÀϰåºÍ×¢»áÒ»ÑùÇø·Öµ¥×ӵľßÌåÀàÐÍ£¬Ôò¼Ì³ÐAbstractViewer¾Í¿ÉÒÔ¡£

AndroidÖеķÃÎÊÕßģʽ

°²×¿ÖеÄÖøÃû¿ªÔ´¿âButterKnife¡¢Dagger¡¢Retrofit¶¼ÊÇ»ùÓÚAPT£¨Annotation Processing Tools£©ÊµÏÖ¡£¶ø±àÒë×¢½âºËÐÄÒÀÀµAPT¡£µ±ÎÒÃÇͨ¹ýAPT´¦Àí×¢½âʱ£¬×îÖջὫ»ñÈ¡µ½µÄÔªËØ×ª»»ÎªÏàÓ¦µÄElementÔªËØ£¬ÒÔ±ã»ñÈ¡µ½ËüÃǶÔÓ¦ÐÅÏ¢¡£ÄÇÃ´ÔªËØ»ùÀàµÄÔ´ÂëÈçÏ£º£¨Â·¾¶£ºjavax.lang.model.element.Element£©

public interface Element extends javax.lang.model.AnnotatedConstruct {

/**
* Returns the {@code kind} of this element.
*
* @return the kind of this element
*/
ElementKind getKind();//»ñÈ¡ÔªËØÀàÐÍ

//´úÂëÊ¡ÂÔ

/**
* Applies a visitor to this element.
*
* @param <R> the return type of the visitor's methods
* @param <P> the type of the additional parameter to the visitor's methods
* @param v the visitor operating on this element
* @param p additional parameter to the visitor
* @return a visitor-specified result
*/
<R, P> R accept(ElementVisitor<R, P> v, P p);//½ÓÊÜ·ÃÎÊÕߵķÃÎÊ
}

ElementVisitor¾ÍÊÇ·ÃÎÊÕßÀàÐÍ£¬ElementVisitorÔ´ÂëÈçÏ£º

public interface ElementVisitor<R, P> {
/**
* Visits an element.
* @param e the element to visit
* @param p a visitor-specified parameter
* @return a visitor-specified result
*/
R visit(Element e, P p);

/**
* A convenience method equivalent to {@code v.visit(e, null)}.
* @param e the element to visit
* @return a visitor-specified result
*/
R visit(Element e);

/**
* Visits a package element.
* @param e the element to visit
* @param p a visitor-specified parameter
* @return a visitor-specified result
*/
R visitPackage(PackageElement e, P p);

/**
* Visits a type element.
* @param e the element to visit
* @param p a visitor-specified parameter
* @return a visitor-specified result
*/
R visitType(TypeElement e, P p);

/**
* Visits a variable element.
* @param e the element to visit
* @param p a visitor-specified parameter
* @return a visitor-specified result
*/
R visitVariable(VariableElement e, P p);

/**
* Visits an executable element.
* @param e the element to visit
* @param p a visitor-specified parameter
* @return a visitor-specified result
*/
R visitExecutable(ExecutableElement e, P p);

/**
* Visits a type parameter element.
* @param e the element to visit
* @param p a visitor-specified parameter
* @return a visitor-specified result
*/
R visitTypeParameter(TypeParameterElement e, P p);

/**
* Visits an unknown kind of element.
* This can occur if the language evolves and new kinds
* of elements are added to the {@code Element} hierarchy.
*
* @param e the element to visit
* @param p a visitor-specified parameter
* @return a visitor-specified result
* @throws UnknownElementException
* a visitor implementation may optionally throw this exception
*/
R visitUnknown(Element e, P p);
}

ÔÚElementVisitorÖж¨ÒåÁ˶àÖÖvisit½Ó¿Ú£¬Ã¿¸ö½Ó¿Ú´¦ÀíÒ»ÖÖÔªËØÀàÐÍ£¬ÄÇôÕâ¾ÍÊǵäÐ͵ķÃÎÊÕßģʽ¡£

×ܽá

Óŵ㣺

1¡¢Ê¹µÃÊý¾Ý½á¹¹ºÍ×÷ÓÃÓڽṹÉϵIJÙ×÷½âñʹµÃ²Ù×÷¼¯ºÏ¿ÉÒÔ¶ÀÁ¢±ä»¯¡£

2¡¢Ìí¼ÓеIJÙ×÷»òÕß˵·ÃÎÊÕß»á·Ç³£ÈÝÒס£

3¡¢½«¶Ô¸÷¸öÔªËØµÄÒ»×é²Ù×÷¼¯ÖÐÔÚÒ»¸ö·ÃÎÊÕßÀ൱ÖС£

4¡¢Ê¹µÃÀà²ã´Î½á¹¹²»¸Ä±äµÄÇé¿öÏ£¬¿ÉÒÔÕë¶Ô¸÷¸ö²ã´Î×ö³ö²»Í¬µÄ²Ù×÷£¬¶ø²»Ó°ÏìÀà²ã´Î½á¹¹µÄÍêÕûÐÔ¡£

5¡¢¿ÉÒÔ¿çÔ½Àà²ã´Î½á¹¹£¬·ÃÎʲ»Í¬²ã´ÎµÄÔªËØÀ࣬×ö³öÏàÓ¦µÄ²Ù×÷¡£

ȱµã£º

1¡¢Ôö¼ÓеÄÔªËØ»á·Ç³£À§ÄÑ¡£

2¡¢ÊµÏÖÆðÀ´±È½Ï¸´ÔÓ£¬»áÔö¼ÓϵͳµÄ¸´ÔÓÐÔ¡£

3¡¢ÆÆ»µ·â×°£¬Èç¹û½«·ÃÎÊÐÐΪ·ÅÔÚ¸÷¸öÔªËØÖУ¬Ôò¿ÉÒÔ²»±©Â¶ÔªËصÄÄÚ²¿½á¹¹ºÍ״̬£¬µ«Ê¹Ó÷ÃÎÊÕßģʽµÄʱºò£¬ÎªÁËÈ÷ÃÎÊÕßÄÜ»ñÈ¡µ½Ëù¹ØÐĵÄÐÅÏ¢£¬ÔªËØÀ಻µÃ²»±©Â¶³öһЩÄÚ²¿µÄ״̬ºÍ½á¹¹£¬¾ÍÏñÊÕÈëºÍÖ§³öÀà±ØÐëÌṩ·ÃÎʽð¶îºÍµ¥×ÓµÄÏîÄ¿µÄ·½·¨Ò»Ñù¡£

ÊÊÓÃÐÔ£º

1¡¢Êý¾Ý½á¹¹Îȶ¨£¬×÷ÓÃÓÚÊý¾Ý½á¹¹µÄ²Ù×÷¾­³£±ä»¯µÄʱºò¡£

2¡¢µ±Ò»¸öÊý¾Ý½á¹¹ÖУ¬Ò»Ð©ÔªËØÀàÐèÒª¸ºÔðÓëÆä²»Ïà¹ØµÄ²Ù×÷µÄʱºò£¬ÎªÁ˽«ÕâЩ²Ù×÷·ÖÀë³öÈ¥£¬ÒÔ¼õÉÙÕâÐ©ÔªËØÀàµÄÖ°Ôðʱ£¬¿ÉÒÔʹÓ÷ÃÎÊÕßģʽ¡£

3¡¢ÓÐʱÔÚ¶ÔÊý¾Ý½á¹¹ÉϵÄÔªËØ½øÐвÙ×÷µÄʱºò£¬Ðè񻂿·Ö¾ßÌåµÄÀàÐÍ£¬ÕâʱʹÓ÷ÃÎÊÕßģʽ¿ÉÒÔÕë¶Ô²»Í¬µÄÀàÐÍ£¬ÔÚ·ÃÎÊÕßÀàÖж¨Ò岻ͬµÄ²Ù×÷£¬´Ó¶øÈ¥³ýµôÀàÐÍÅжϡ£

   
2900 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

ΪʲôҪ×ö³ÖÐø²¿Êð£¿
ÆÊÎö¡°³ÖÐø½»¸¶¡±£ºÎå¸öºËÐÄʵ¼ù
¼¯³ÉÓë¹¹½¨Ö¸ÄÏ
³ÖÐø¼¯³É¹¤¾ßµÄÑ¡Ôñ-×°ÔØ
 
Ïà¹ØÎĵµ

³ÖÐø¼¯³É½éÉÜ
ʹÓÃHudson³ÖÐø¼¯³É
³ÖÐø¼¯³ÉÖ®-ÒÀÀµ¹ÜÀí
IPD¼¯³É²úÆ·¿ª·¢¹ÜÀí
Ïà¹Ø¿Î³Ì

ÅäÖùÜÀí¡¢ÈÕ¹¹½¨Óë³ÖÐø¼¯³É
Èí¼þ¼Ü¹¹Éè¼Æ·½·¨¡¢°¸ÀýÓëʵ¼ù
µ¥Ôª²âÊÔ¡¢Öع¹¼°³ÖÐø¼¯³É
»ùÓÚAndroidµÄµ¥Ôª¡¢ÐÔÄܲâÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
Visitor Parttern
ÓÉ±í¼°À￴ģʽ
Éè¼ÆÄ£Ê½Ëæ±ÊϵÁÐ
ÉîÈëdz³öÉè¼ÆÄ£Ê½-½éÉÜ
.NETÖеÄÉè¼ÆÄ£Ê½
Ïà¹ØÅàѵ¿Î³Ì

J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Ó¦ÓÃģʽÉè¼ÆJavaÆóÒµ¼¶Ó¦ÓÃ
Éè¼ÆÄ£Ê½Ô­ÀíÓëÓ¦ÓÃ
J2EEÉè¼ÆÄ£Ê½Ö¸ÄÏ
µ¥Ôª²âÊÔ+ÖØ¹¹+Éè¼ÆÄ£Ê½
Éè¼ÆÄ£Ê½¼°ÆäCSharpʵÏÖ

ijµçÁ¦¹«Ë¾ Éè¼ÆÄ£Ê½Ô­Àí
À¶ÍØÆË Éè¼ÆÄ£Ê½Ô­Àí¼°Ó¦ÓÃ
ÎÀÐǵ¼º½ UML & OOAD
ÌÀɭ·͸Ñз¢ÖÐÐÄ UML& OOAD
Öдïµçͨ Éè¼ÆÄ£Ê½Ô­Àí
Î÷ÃÅ×Ó Ç¶ÈëʽÉè¼ÆÄ£Ê½
 
 
 
¡¡