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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
.NETÉè¼ÆÄ£Ê½£¨12£©£ºÍâ¹Ûģʽ£¨Fa?ade Pattern£©
 
×÷Õß Àî»á¾ü£¬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-09-23
  2726  次浏览      27
 

¸ÅÊö

ÔÚÈí¼þ¿ª·¢ÏµÍ³ÖУ¬¿Í»§³ÌÐò¾­³£»áÓ븴ÔÓϵͳµÄÄÚ²¿×Óϵͳ֮¼ä²úÉúñîºÏ£¬¶øµ¼Ö¿ͻ§³ÌÐòËæ×Å×ÓϵͳµÄ±ä»¯¶ø±ä»¯¡£ÄÇôÈçºÎ¼ò»¯¿Í»§³ÌÐòÓë×Óϵͳ֮¼äµÄ½»»¥½Ó¿Ú£¿ÈçºÎ½«¸´ÔÓϵͳµÄÄÚ²¿×ÓϵͳÓë¿Í»§³ÌÐòÖ®¼äµÄÒÀÀµ½âñÕâ¾ÍÊÇҪ˵µÄFa?ade ģʽ¡£

Òâͼ

Ϊ×ÓϵͳÖеÄÒ»×é½Ó¿ÚÌṩһ¸öÒ»ÖµĽçÃæ£¬Facadeģʽ¶¨ÒåÁËÒ»¸ö¸ß²ã½Ó¿Ú£¬Õâ¸ö½Ó¿ÚʹµÃÕâÒ»×Óϵͳ¸ü¼ÓÈÝÒ×ʹÓá£[GOF ¡¶Éè¼ÆÄ£Ê½¡·]

ʾÒâͼ

ÃÅÃæÄ£Ê½Ã»ÓÐÒ»¸öÒ»°ã»¯µÄÀàͼÃèÊö£¬ÏÂÃæÊÇÒ»¸öʾÒâÐԵĶÔÏóͼ£º

ͼ1 Fa?adeģʽʾÒâÐÔ¶ÔÏóͼ

Éú»îÖеÄÀý×Ó

Íâ¹ÛģʽΪ×ÓϵͳÖеĽӿڶ¨ÒåÁËÒ»¸öͳһµÄ¸ü¸ß²ã´ÎµÄ½çÃæ£¬ÒÔ±ãÓÚʹÓᣵ±Ïû·ÑÕß°´ÕÕĿ¼²É¹ºÊ±£¬ÔòÌåÏÖÁËÒ»¸öÍâ¹Ûģʽ¡£Ïû·ÑÕß²¦´òÒ»¸öºÅÂëÓë¿Í·þ´ú±íÁªÏµ£¬¿Í·þ´ú±íÔò°çÑÝÁËÕâ¸ö"Íâ¹Û"£¬Ëû°üº¬ÁËÓë¶©»õ²¿¡¢ÊÕÒø²¿ºÍËÍ»õ²¿µÄ½Ó¿Ú¡£

ͼ2ʹÓõ绰¶©»õÀý×ÓµÄÍâ¹Ûģʽ¶ÔÏóͼ

Facadeģʽ½â˵

ÎÒÃÇÆ½Ê±µÄ¿ª·¢ÖÐÆäʵÒѾ­²»Öª²»¾õµÄÔÚÓÃFa?adeģʽ£¬ÏÖÔÚÀ´¿¼ÂÇÕâÑùÒ»¸öµÖѺϵͳ£¬µ±ÓÐÒ»¸ö¿Í»§À´Ê±£¬ÓÐÈçϼ¸¼þÊÂÇéÐèҪȷÈÏ£ºµ½ÒøÐÐ×Óϵͳ²éѯËûÊÇ·ñÓÐ×ã¹»¶àµÄ´æ¿î£¬µ½ÐÅÓÃ×Óϵͳ²éѯËûÊÇ·ñÓÐÁ¼ºÃµÄÐÅÓ㬵½´û¿î×Óϵͳ²éѯËûÓÐÎÞ´û¿îÁÓ¼£¡£Ö»ÓÐÕâÈý¸ö×Óϵͳ¶¼Í¨¹ýʱ²Å¿É½øÐеÖѺ¡£ÎÒÃÇÏȲ»¿¼ÂÇFa?adeģʽ£¬ÄÇô¿Í»§³ÌÐò¾ÍÒªÖ±½Ó·ÃÎÊÕâЩ×Óϵͳ£¬·Ö±ð½øÐÐÅжϡ£Àà½á¹¹Í¼Ï£º

ͼ3

ÔÚÕâ¸ö³ÌÐòÖУ¬ÎÒÃÇÊ×ÏÈÒªÓÐÒ»¸ö¹Ë¿ÍÀ࣬ËüÊÇÒ»¸ö´¿Êý¾ÝÀ࣬²¢ÎÞÈκβÙ×÷£¬Ê¾Òâ´úÂ룺

public class Customer
{
private string _name;

public Customer(string name)
{
this._name = name;
}

public string Name
{
get { return _name; }
}
}

ÏÂÃæÕâÈý¸öÀà¾ùÊÇ×ÓϵͳÀ࣬ʾÒâ´úÂ룺

public class Bank
{
public bool HasSufficientSavings(Customer c, int amount)
{
Console.WriteLine("Check bank for " + c.Name);
return true;
}
}

//ÐÅÓÃ×Óϵͳ
public class Credit
{
public bool HasGoodCredit(Customer c)
{
Console.WriteLine("Check credit for " + c.Name);
return true;
}
}

//´û¿î×Óϵͳ
public class Loan
{
public bool HasNoBadLoans(Customer c)
{
Console.WriteLine("Check loans for " + c.Name);
return true;
}
}

À´¿´¿Í»§³ÌÐòµÄµ÷Óãº

public class MainApp
{
private const int _amount = 12000;

public static void Main()
{
Bank bank = new Bank();
Loan loan = new Loan();
Credit credit = new Credit();

Customer customer = new Customer("Ann McKinsey");

bool eligible = true;

if (!bank.HasSufficientSavings(customer, _amount))
{
eligible = false;
}
else if (!loan.HasNoBadLoans(customer))
{
eligible = false;
}
else if (!credit.HasGoodCredit(customer))
{
eligible = false;
}

Console.WriteLine("\n" + customer.Name + " has been " + (eligible ? "Approved" : "Rejected"));
Console.ReadLine();
}
}

¿ÉÒÔ¿´µ½£¬ÔÚ²»ÓÃFa?adeģʽµÄÇé¿öÏ£¬¿Í»§³ÌÐòÓëÈý¸ö×Óϵͳ¶¼·¢ÉúÁËñîºÏ£¬ÕâÖÖñîºÏʹµÃ¿Í»§³ÌÐòÒÀÀµÓÚ×Óϵͳ£¬µ±×Óϵͳ±ä»¯Ê±£¬¿Í»§³ÌÐòÒ²½«ÃæÁٺܶà±ä»¯µÄÌôÕ½¡£Ò»¸öºÏÇéºÏÀíµÄÉè¼Æ¾ÍÊÇΪÕâЩ×Óϵͳ´´½¨Ò»¸öͳһµÄ½Ó¿Ú£¬Õâ¸ö½Ó¿Ú¼ò»¯Á˿ͻ§³ÌÐòµÄÅжϲÙ×÷¡£¿´Ò»ÏÂÒýÈëFa?adeģʽºóµÄÀà½á¹¹Í¼£º

ͼ4

ÃÅÃæÀàMortageµÄʵÏÖÈçÏ£º

public class Mortgage
{
private Bank bank = new Bank();
private Loan loan = new Loan();
private Credit credit = new Credit();

public bool IsEligible(Customer cust, int amount)
{
Console.WriteLine("{0} applies for {1:C} loan\n",
cust.Name, amount);

bool eligible = true;

if (!bank.HasSufficientSavings(cust, amount))
{
eligible = false;
}
else if (!loan.HasNoBadLoans(cust))
{
eligible = false;
}
else if (!credit.HasGoodCredit(cust))
{
eligible = false;
}

return eligible;
}
}

¹Ë¿ÍÀàºÍ×ÓϵͳÀàµÄʵÏÖÈÔÈ»ÈçÏ£º

public class Bank
{
public bool HasSufficientSavings(Customer c, int amount)
{
Console.WriteLine("Check bank for " + c.Name);
return true;
}
}

//ÐÅÓÃÖ¤×Óϵͳ
public class Credit
{
public bool HasGoodCredit(Customer c)
{
Console.WriteLine("Check credit for " + c.Name);
return true;
}
}

//´û¿î×Óϵͳ
public class Loan
{
public bool HasNoBadLoans(Customer c)
{
Console.WriteLine("Check loans for " + c.Name);
return true;
}
}

//¹Ë¿ÍÀà
public class Customer
{
private string name;

public Customer(string name)
{
this.name = name;
}

public string Name
{
get { return name; }
}
}

¶ø´Ëʱ¿Í»§³ÌÐòµÄʵÏÖ£º

public class MainApp
{
public static void Main()
{
//Íâ¹Û
Mortgage mortgage = new Mortgage();

Customer customer = new Customer("Ann McKinsey");
bool eligable = mortgage.IsEligible(customer, 125000);

Console.WriteLine("\n" + customer.Name +
" has been " + (eligable ? "Approved" : "Rejected"));
Console.ReadLine();
}
}

¿ÉÒÔ¿´µ½ÒýÈëFa?adeģʽºó£¬¿Í»§³ÌÐòÖ»ÓëMortgage·¢ÉúÒÀÀµ£¬Ò²¾ÍÊÇMortgageÆÁ±ÎÁË×Óϵͳ֮¼äµÄ¸´ÔӵIJÙ×÷£¬´ïµ½Á˽âñîÄÚ²¿×ÓϵͳÓë¿Í»§³ÌÐòÖ®¼äµÄÒÀÀµ¡£

.NET¼Ü¹¹ÖеÄFa?adeģʽ

Fa?adeģʽÔÚʵ¼Ê¿ª·¢ÖÐ×î¶àµÄÔËÓõ±Êô¿ª·¢N²ã¼Ü¹¹µÄÓ¦ÓóÌÐòÁË£¬Ò»¸öµäÐ͵ÄN²ã½á¹¹ÈçÏ£º

ͼ5

ÔÚÕâ¸ö¼Ü¹¹ÖУ¬×ܹ²·ÖΪËĸöÂß¼­²ã£¬·Ö±ðΪ£ºÓû§²ãUI£¬ÒµÎñÍâ¹Û²ãBusiness Fa?ade£¬ÒµÎñ¹æÔò²ãBusiness Rule£¬Êý¾Ý·ÃÎʲãData Access¡£ÆäÖÐBusiness Fa?ade²ãµÄÖ°ÔðÈçÏ£º

1.´Ó¡°Óû§¡±²ã½ÓÊÕÓû§ÊäÈë

2.Èç¹ûÇëÇóÐèÒª¶ÔÊý¾Ý½øÐÐÖ»¶Á·ÃÎÊ£¬Ôò¿ÉÄÜʹÓá°Êý¾Ý·ÃÎÊ¡±²ã

3. ½«ÇëÇ󴫵ݵ½¡°ÒµÎñ¹æÔò¡±²ã

4. ½«ÏìÓ¦´Ó¡°ÒµÎñ¹æÔò¡±²ã·µ»Øµ½¡°Óû§¡±²ã

5. ÔÚ¶Ô¡°ÒµÎñ¹æÔò¡±²ãµÄµ÷ÓÃÖ®¼äά»¤ÁÙʱ״̬

¶ÔÕâÒ»¼Ü¹¹×îºÃµÄÌåÏÖ¾ÍÊÇDuwamishʾÀýÁË¡£ÔÚ¸ÃÓ¦ÓóÌÐòÖУ¬Óв¿·Ö²Ù×÷Ö»ÊǼòµ¥µÄ´ÓÊý¾Ý¿â¸ù¾ÝÌõ¼þÌáÈ¡Êý¾Ý£¬²»ÐèÒª¾­¹ýÈκδ¦Àí£¬¶øÖ±½Ó½«Êý¾ÝÏÔʾµ½ÍøÒ³ÉÏ£¬±ÈÈç²éѯijÀà±ðµÄͼÊéÁÐ±í¡£¶øÁíÍâһЩ²Ù×÷£¬±ÈÈç¼ÆË㶨µ¥ÖÐͼÊéµÄ×ܼ۲¢¸ù¾Ý¹Ë¿ÍµÄ¼¶±ð¼ÆËã»Ø¿ÛµÈµÈ£¬Õⲿ·ÖÍùÍùÓÐÐí¶à²»Í¬µÄ¹¦ÄܵÄÀ࣬²Ù×÷ÆðÀ´Ò²±È½Ï¸´ÔÓ¡£Èç¹û²ÉÓô«Í³µÄÈý²ã½á¹¹£¬ÕâЩÉÌÒµÂß¼­Ò»°ãÊÇ»á·ÅÔÚÖмä²ã£¬ÄÇô¶ÔÄÚ²¿µÄÕâЩ´óÁ¿ÖÖÀà·±¶à£¬Ê¹Ó÷½·¨Ò²¸÷ÒìµÄ²»Í¬µÄÀàµÄµ÷ÓÃÈÎÎñ£¬¾ÍÍêÈ«Âäµ½Á˱íʾ²ã¡£ÕâÑùÊÆ±Ø»áÔö¼Ó±íʾ²ãµÄ´úÂëÁ¿£¬½«±íʾ²ãµÄÈÎÎñ¸´ÔÓ»¯£¬ºÍ±íʾ²ãÖ»¸ºÔð½ÓÊÜÓû§µÄÊäÈë²¢·µ»Ø½á¹ûµÄÈÎÎñ²»Ì«Ïà³Æ£¬²¢Ôö¼ÓÁ˲ãÓë²ãÖ®¼äµÄñîºÏ³Ì¶È¡£ÓÚÊǾÍÒýÈëÁËÒ»¸öFa?ade²ã£¬ÈÃÕâ¸öFacadeÀ´¸ºÔð¹ÜÀíϵͳÄÚ²¿ÀàµÄµ÷Ó㬲¢Îª±íʾ²ãÌṩÁËÒ»¸öµ¥Ò»¶ø¼òµ¥µÄ½Ó¿Ú¡£¿´Ò»ÏÂDuwamish½á¹¹Í¼£º

ͼ6

´ÓͼÖпÉÒÔ¿´µ½£¬UI²ã½«ÇëÇó·¢Ë͸øÒµÎñÍâ¹Û²ã£¬ÒµÎñÍâ¹Û²ã¶ÔÇëÇó½øÐгõ²½µÄ´¦Àí£¬ÅжÏÊÇ·ñÐèÒªµ÷ÓÃÒµÎñ¹æÔò²ã£¬»¹ÊÇÖ±½Óµ÷ÓÃÊý¾Ý·ÃÎʲã»ñÈ¡Êý¾Ý¡£×îºóÓÉÊý¾Ý·ÃÎʲã·ÃÎÊÊý¾Ý¿â²¢°´ÕÕÀ´Ê±µÄ²½Öè·µ»Ø½á¹ûµ½UI²ã£¬À´¿´¾ßÌåµÄ´úÂëʵÏÖ¡£

ÔÚ»ñÈ¡ÉÌÆ·Ä¿Â¼µÄʱºò£¬Web UIµ÷ÓÃÒµÎñÍâ¹Û²ã£º

productSystem = new ProductSystem();
categorySet = productSystem.GetCategories(categoryID);

ÒµÎñÍâ¹Û²ãÖ±½Óµ÷ÓÃÁËÊý¾Ý·ÃÎʲ㣺

public CategoryData GetCategories(int categoryId)
{
//
// Check preconditions
//
ApplicationAssert.CheckCondition(categoryId >= 0,"Invalid Category Id",ApplicationAssert.LineNumber);
//
// Retrieve the data
//
using (Categories accessCategories = new Categories())
{
return accessCategories.GetCategories(categoryId);
}

}

ÔÚÌí¼Ó¶©µ¥Ê±£¬UIµ÷ÓÃÒµÎñÍâ¹Û²ã£º

public void AddOrder()
{
ApplicationAssert.CheckCondition(cartOrderData != null, "Order requires data", ApplicationAssert.LineNumber);

//Write trace log.
ApplicationLog.WriteTrace("Duwamish7.Web.Cart.AddOrder:\r\nCustomerId: " +
cartOrderData.Tables[OrderData.CUSTOMER_TABLE].Rows[0][OrderData.PKID_FIELD].ToString());
cartOrderData = (new OrderSystem()).AddOrder(cartOrderData);
}

ÒµÎñÍâ¹Û²ãµ÷ÓÃÒµÎñ¹æÔò²ã£º

public OrderData AddOrder(OrderData order)
{
//
// Check preconditions
//
ApplicationAssert.CheckCondition(order != null, "Order is required", ApplicationAssert.LineNumber);

(new BusinessRules.Order()).InsertOrder(order);
return order;
}

ÒµÎñ¹æÔò²ã½øÐи´ÔÓµÄÂß¼­´¦Àíºó£¬ÔÙµ÷ÓÃÊý¾Ý·ÃÎʲ㣺

public bool InsertOrder(OrderData order)
{
//
// Assume it's good
//
bool isValid = true;
//
// Validate order summary
//
DataRow summaryRow = order.Tables[OrderData.ORDER_SUMMARY_TABLE].Rows[0];

summaryRow.ClearErrors();

if (CalculateShipping(order) != (Decimal)(summaryRow[OrderData.SHIPPING_HANDLING_FIELD]))
{
summaryRow.SetColumnError(OrderData.SHIPPING_HANDLING_FIELD, OrderData.INVALID_FIELD);
isValid = false;
}

if (CalculateTax(order) != (Decimal)(summaryRow[OrderData.TAX_FIELD]))
{
summaryRow.SetColumnError(OrderData.TAX_FIELD, OrderData.INVALID_FIELD);
isValid = false;
}
//
// Validate shipping info
//
isValid &= IsValidField(order, OrderData.SHIPPING_ADDRESS_TABLE, OrderData.SHIP_TO_NAME_FIELD, 40);
//
// Validate payment info
//
DataRow paymentRow = order.Tables[OrderData.PAYMENT_TABLE].Rows[0];

paymentRow.ClearErrors();

isValid &= IsValidField(paymentRow, OrderData.CREDIT_CARD_TYPE_FIELD, 40);
isValid &= IsValidField(paymentRow, OrderData.CREDIT_CARD_NUMBER_FIELD, 32);
isValid &= IsValidField(paymentRow, OrderData.EXPIRATION_DATE_FIELD, 30);
isValid &= IsValidField(paymentRow, OrderData.NAME_ON_CARD_FIELD, 40);
isValid &= IsValidField(paymentRow, OrderData.BILLING_ADDRESS_FIELD, 255);
//
// Validate the order items and recalculate the subtotal
//
DataRowCollection itemRows = order.Tables[OrderData.ORDER_ITEMS_TABLE].Rows;

Decimal subTotal = 0;

foreach (DataRow itemRow in itemRows)
{
itemRow.ClearErrors();

subTotal += (Decimal)(itemRow[OrderData.EXTENDED_FIELD]);

if ((Decimal)(itemRow[OrderData.PRICE_FIELD]) <= 0)
{
itemRow.SetColumnError(OrderData.PRICE_FIELD, OrderData.INVALID_FIELD);
isValid = false;
}

if ((short)(itemRow[OrderData.QUANTITY_FIELD]) <= 0)
{
itemRow.SetColumnError(OrderData.QUANTITY_FIELD, OrderData.INVALID_FIELD);
isValid = false;
}
}
//
// Verify the subtotal
//
if (subTotal != (Decimal)(summaryRow[OrderData.SUB_TOTAL_FIELD]))
{
summaryRow.SetColumnError(OrderData.SUB_TOTAL_FIELD, OrderData.INVALID_FIELD);
isValid = false;
}

if ( isValid )
{
using (DataAccess.Orders ordersDataAccess = new DataAccess.Orders())
{
return (ordersDataAccess.InsertOrderDetail(order)) > 0;
}
}
else
return false;
}

Ч¹û¼°ÊµÏÖÒªµã

1£®Fa?adeģʽ¶Ô¿Í»§ÆÁ±ÎÁË×Óϵͳ×é¼þ£¬Òò¶ø¼õÉÙÁ˿ͻ§´¦ÀíµÄ¶ÔÏóµÄÊýÄ¿²¢Ê¹µÃ×ÓϵͳʹÓÃÆðÀ´¸ü¼Ó·½±ã¡£

2£®Fa?adeģʽʵÏÖÁË×ÓϵͳÓë¿Í»§Ö®¼äµÄËÉñîºÏ¹ØÏµ£¬¶ø×ÓϵͳÄÚ²¿µÄ¹¦ÄÜ×é¼þÍùÍùÊǽôñîºÏµÄ¡£ËÉñîºÏ¹ØÏµÊ¹µÃ×ÓϵͳµÄ×é¼þ±ä»¯²»»áÓ°Ïìµ½ËüµÄ¿Í»§¡£

3£®Èç¹ûÓ¦ÓÃÐèÒª£¬Ëü²¢²»ÏÞÖÆËüÃÇʹÓÃ×ÓϵͳÀà¡£Òò´ËÄã¿ÉÒÔÔÚϵͳÒ×ÓÃÐÔÓëͨÓÃÐÔÖ®¼äÑ¡Ôñ¡£

ÊÊÓÃÐÔ

1£®ÎªÒ»¸ö¸´ÔÓ×ÓϵͳÌṩһ¸ö¼òµ¥½Ó¿Ú¡£

2£®Ìá¸ß×ÓϵͳµÄ¶ÀÁ¢ÐÔ¡£

3£®ÔÚ²ã´Î»¯½á¹¹ÖУ¬¿ÉÒÔʹÓÃFacadeģʽ¶¨ÒåϵͳÖÐÿһ²ãµÄÈë¿Ú¡£

×ܽá

Fa?adeÄ£Ê½×¢ÖØµÄÊǼò»¯½Ó¿Ú£¬Ëü¸ü¶àµÄʱºòÊǴӼܹ¹µÄ²ã´ÎÈ¥¿´Õû¸öϵͳ£¬¶ø²¢·Çµ¥¸öÀàµÄ²ã´Î¡£

   
2726 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

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

³ÖÐø¼¯³É½éÉÜ
ʹÓÃ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
Öдïµçͨ Éè¼ÆÄ£Ê½Ô­Àí
Î÷ÃÅ×Ó Ç¶ÈëʽÉè¼ÆÄ£Ê½
 
 
 
¡¡