观察者模式(Observer pattern)
知识点
使对象之间达到松耦合的效果。
观察者模式定义了对象之间一对多的关系。主题用一个共同的接口来更新观察者。
观察者和被观察者之间通过松耦合的方式结合,被观察者不用理会观察者的实现细节,只需要观察者实现了观察接口(即所谓的注册)。
aaarticlea/png;base64,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" alt="" />
示例代码
public interface Subject
{
void RegisterObserver(Observer Observer);
void RemoveObserver(Observer Observer);
//当主题发生改变时,该方法会被调用,即通知所有观察者
void NotifyObserver();
}
//主题(被观察的对象)
public class WeatherData : Subject
{
private List<Observer> observers; public float Temperature
{
get;
private set;
} public float Humidity
{
get;
private set;
} public float Pressure
{
get;
private set;
} public WeatherData() {
observers = new List<Observer>();
} #region Subject 成员 public void RegisterObserver(Observer Observer)
{
observers.Add(Observer);//注册观察者
} public void RemoveObserver(Observer Observer)
{
observers.Remove(Observer);//取消观察者的的注册
} public void NotifyObserver()
{
observers.ForEach(o => {
((Observer)o).Update(Temperature, Humidity, Pressure);
});
} #endregion public void DataChanged() {
NotifyObserver();
} public void SetMeasurements(float temp, float humidity, float pressure) {
Temperature = temp;
Humidity = humidity;
Pressure = pressure;
DataChanged();
}
}
//观察者更新数据接口
public interface Observer
{
void Update(float temp,float humidity,float pressure);
} //显示数据接口
public interface DispalyElement
{
void Dispay();
}
//观察者
public class CurrentConditionDisplay : Observer, DispalyElement
{
readonly Subject _subject;
public Subject Subject
{
get
{
return _subject;
}
} public float Temperature
{
get;
private set;
} public float Humidity
{
get;
private set;
} public CurrentConditionDisplay(Subject subject)
{
_subject = subject;
_subject.RegisterObserver(this);
} #region Observer 成员 public void Update(float temp, float humidity, float pressure)
{
Temperature = temp;
Humidity = humidity;
Dispay();
} #endregion #region DispalyElement 成员 public void Dispay()
{
Console.WriteLine("{0}F {1}%", this.Temperature, this.Humidity);
} #endregion
}
最后来调用测试一下:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAe0AAACoCAIAAABCNCHHAAAgAElEQVR4nOy9d3Qcx50uWv+tKVKk9tqS02qen4Pk89YkAZKgCIIgRRBMIDJAgCARiDBIBEBkYHLOOec8g0HOkHyltUR5zz3HWl/7rP2uuZYlB3lFUvetw9q776733X/eH1Xd0z3TA4IiKQJifec7OD011dXVVYOvfv2rql8DFgYGBgbGTgZ40hXAwMDAwHgofHo6njNyu85/u85/u6jkU7smBgYGxmcfn7I9XpSvetw6Xl347nI5wcKmx3otDAwMjCePz6SOS/bDw1O9Z9/15J16rJfDwMDAeMJ4XDpOelHq/MGcVHK6jlOyUdLzJKVEYmlL0WaJDKDoOCs/bwmZ5Pvty4Wc3rPITqcKfYbl3iQpp1j0Zzn52U7fb083/F/ieM5yegvfXS5f6s2z4wcCDAyMTwOPRcdzRm7XjbQzfZPdHs+TlBKKnzPCkIcxkQkUHW+SlBP2+H77cvlS70ssdFzYRLfWU8fVhWRik4R6SvrpVJzqPfuuZD+L9RLHU/6uZD+ruvDd5bOc/Jc4HjgMYGBgYDw+PA4dby/yv5Gfx/hVho6XBEl7nLTcX255o86fPhIwJjKB6h9POVUyxfcljqfcXk1+JDJk1XEGy5pmuRM6bq8mC8E6joGB8Sngyeo4JSfFHkeAEp8m3IyJNFD9KilsWcep3pLNhgGa4lPtcazjGBgYny4eh44X5au25lfJk5QSOp4zkuZJJzNsLTGFreo4s1/lVO9Zwgbf+un77dgex8DAeGJ4TPOcRfmqNG8JNSU1q0nOc5a2SIqYchKiz5jIiC3rOIvqGKGZ3mnekmynkznPcnoLsY5jYGA8IeD9nHQ0Scopw8B++zIWYgwMjG0OrON00HS8uhAvHMTAwNj2wDqehvy8pfTF4xgYGBjbGVjHMTAwMHY2sI5jYGBg7GxgHcfAwMDY2cA6joGBgbGz8Rh1nB374IMPPvggxn58l8DAwMDAeGw6Xqy4hSUcAwMD4/Hjsek4O/bBLUXx4yodAwMDAwMB6zgGBgbGzsbj1HHsVsHAwMB4/HgcOs6O4elNDAwMjE8Lj8sex9OcGBgYGJ8OsH8cAwMDY2cD6zgGBgbGzgbWcQwMDIydDbwPCAMDA2Nn4zHuyy9W3ML78jEwMDAeN3CcLAwMDIydDazjGBgYGDsbWMcxMDAwdjawjmNgYGDsbDz1Op4nKfXfLip5ohfKk5T6gzmP6kLFilsPMrv8iAPhPFR7oqlx2uw4CmP/wZNZxlqsuIWXz2Jse+x0HS/KV21RNbLk3P46zo6lNGwrGv0gOr611aFbb+SH1/Esqvnk9JQdw2uuMLY7nnod3w7YVMeLFbdu3UIiVqyIxWKPTtC2usb/U2u67ajjeEsbxvbHztHxPEmp/3ad/3ad/3ZpSxGLxXq55Y06IqXOf7vO/0Z+HovFYuWMpBKh+tw3Z5pIUUrIKq8vt7xRp5K8TDkF1opaT7JY5gtRcm5yoWLFrVsKtiKmKGYVKxRsUtBIfwPVC0EmUuSZHfsgpiAcFlRBYtCnB2nkohYyM6o80222F/mD+UQhqIlYLFZJkFoskf5QOp6tQVI3TyZTs5JtknLqpDcL3tOGsc2xY3Q8Z4TRJNzUVKTZudlypqfnjNyuG2nfQo3aiwhRg2qVg65IJFKPGS7UXkTq3f3s8RibVayIKRSxGJtJ0NJlJu0zJYwwzUfAIONbb+SckdvkMEY/i+E2UXuWBAnFpzRdSZAyHD4ie5zSAFSnFDETQLlx+mFWrcZCjrG9sWN0HBmG6QrLpM40W+9BdZyqzvcBaYO/3PIGrBh5QGbIKnBU/dpUx5G+EFKSEjSaUbm5jhOfaN8wCNfWGzmL4mdmJkY42m0+Hh1nahAmdWbW8U23H2PXCsa2xo7RcQSo0SmhyZQYikZ8Env8AXSclScpVUleZhXlq9Apj1HH0z+nKdCj0fFU3e7TyA+p41TPFbW1H0bHmRuE8SYpgp9RKPwu/Rys4xjbGjtNx1npqpdyTKe+pbq/s+dESNOdonzVFv0qMPMb+SVQzdOvfh+/SurbonzVZv5xZh0vVtz6gGqXfzIdz65NmzfyQ+p4HqXFaHgIHc/SIAw6vqWi6CdhvwrG9sZO0XEodpvPFqbPXpa2SIqo+piek1YmpVhq+v2WdZcE0+uT8uqQIs58IXIKsaikvSjrhTIkhOLlJUxKBSFWlKm6lHMhm45nCvmDNXKGjjPe5n3tcWojP5p5TkqD3NceJxWf1nRpp2AZx9jm2Ck6jvEY8KT0KTXhyWLRjP1PZd0hfUH4Fjwm2KmCsd2BdfypxpNRcpqOU9btPAEdv/8uH7wPCGP7A+v4045HvC9/S6B5YCie909nXz7NhXL/2VMs4hjbHljHMTAwMHY2sI5jYGBg7GxgHcfAwMDY2cA6joGBgbGzscN0HE164aknDAwMDAI7SsfxfgwMDAyMDOwoHccbMjAwMDAygHUcAwMDY2djp+k4dqtgYGBg0LFTdDwjqB8GBgYGBovF2jk6zmLhaU4MDAwMJuwkHcf+cQwMDIxMYB3HwMDA2NnAOo6BgYGxs7GjdBw7yDEwMDAysKN0/D4vNcfAwMB4GrHDdBwDAwMDIw1YxzEwMDB2NrCOY2BgYOxsYB3HwMDA2NnAOr798TSHlakufFey/0lXIhtoHVOsuIUXxWI8IWAd327IXFy5M3R8v325sInyuUlSbq9+wDLy85bohTykjjdJyt9dJnjfcjKvvhkY+2kndBTGZxBYx7cbdrCOn+Xkpz5vEx1f6n2JxWKxWC9xPPeT8gfRceatDHijGsaTwdOr4y+3vFGnkrxMfMwZuV3aUgQP6vyIRSWpb4taJKUoPZjDXGTGPzf5f43WvdPWvqN31FESKbkg4Mns2AcxNpE7pRNZyowpyPRN1L+9yB/Mb3kD3ia8cRaLxcoj7xHee1G+KtUILBaLVRKkNhoVL3E8zDp+qvcsYRSTKrnfTprJKPEljodiOy+Xv+vJO8VCOk6Y1anys5RZyCHTJftZNB2HMg1L2PLVGXKmdWwaGOQdR+rEePx4enWcxWov8r+Rn0ceZ6hznqSUSMwZuU3qV84IXdooIP69kQVN/FdTDWomBaD99zM/r6Ok1KM7c5nsWErpUY7j/f51GuS18H5v1420s1gsVkmQGJmojYAahxje0Fcvt7yBzsoAoeOEBd0koX1ksVis6kJCH1M41Xs2lYHRHl9G40GThDComcvcb18mVRs5eWg6nvHEcP+rZ8uZ3e7etPcwMB4TnmYdT9ngNHkqCZL2eB1Fx7NpNxVorosdu3XrVoxNfEw3sylCm26Rs+7jVyG/zFLmll0wFMkmhyuKMV7nv13nfyM/j/VyyxulLUWskmCp6o2iEuIjI6AB3iQptEsKmwhZpxjOVDs3i+d6U78KqaRZykx30LOy6/hWr54t5ybNjF0rGE8AT7WOs/IkpSrJy6yifBXVMCeO6fb4VnQc/oMXK2IKtuJWjI3+3Zn/tSmp97fHM3Q8i1wwCExWezxDxxl9JiXBupH2l1uC+SWS0pH2zdqhSVJur36JI8k7VV1or0Y6TldSAhTD/P72eIaOM5d5Xx0nC3+gqzPmxDqOsb3wdOs4VPASqOYsFguKGtLxnJEHtsdZxYpbt2KxmKKYVayIxWK3SAd3xv99seIW1RlC+T5DCZh0PMviiIeyx1ntRf6M28yTlKqCRSOSl1lF+SPBotSAl4EmSfmSpNDe+xKLtd8uyeN4CNHMkNdTvWdpDujU9GOG64NJxxnLvJ+Opy609atnzfnAfhUs7RiPFU+5jiMvClW8yHnO0hZJ0YPqOMVBXay49QFNf7O6VW4pFDT5TWWmzHOmvrpPmQ+h43TXChrb2ov8FO9T1jle5O6AOginDZGqUt0gNFWFU5e9tBUpqcyUec7UV9RjhjI384rQHSxbu3rWnA8wzwm7CTvIMR4nnnodx8D4BHiAdYeUJy8MjMcDrOMYGJ8EW9kHBG1xLOIYjxtYxzEwPiFoXqydsVsL47MJrOMYGBgYOxtYxzEwMDB2NrCOY2BgYOxsYB3HwMDA2NnAOo6B8UhB2/mJ1qRvKYzi1nM+WGU+YZnk2vmHrNJjngB+6OI/E4HjsY5/xsC8sHkbghJKMCN41mMHc0isR1Ol++t4loBcn1hzNwmz/rBjw4PFZM/Eo/45Ppaozp+BwPFYxz9j2BE6np+3tPzg0ckfcQUytfXRVClNx7d09YfDg4VZfyA8XFUf/Y/xMUXn3/FRcZ5eHX8M8ccRKHEMM2LMUn6HjLHCmQOIM4Qap2XMCHKeHqv8IfDoI5VnUTrmLfgMUcWzJDIFJa8ufFeSR8QWp8YMSA+XmE18t1ZmWk5qPdNcE/cNdE4TzS1e/X5h1rOVSVQ+yx0RpVFPZw7dznR1Vro6buvo/Ds9cPzTq+OPI/44i/kZLauOZ8ZFYUpkDDXOGJSctVUTiDkIIiMeS6TyLEEQmXU8M4IKUyJjUHLG8OWsTHlirhIlThblOFtIdGo8GeqQwGz7Mxm59PStX32zMOsMQpxxaUqZ1ItuVtW0sGXZokLSLIntGJ2f+SrpBW9/PM06/ujjj2d5QMtuj28lYCFzqPEswbMe/aPso49U/qA6vqXQhsxBybOE2dqajr/E8VA9LQwDBmMo3Uek45/w6vfTcfRAQPMgUYfAtPwZVWXyxZNXpL8TikEqt3F0/p3tWnmqdfzRxx9/HDqeNXz5Q+j4g9njjyFS+QP5VR4wRO19y8wiT+lV2pk6fj8hTt0vqeZb1/Espvep3rNLvS+lv0w147e8DaPzM15xB+Lp1vFHHn+cHq2WQJoj8AF1nHk6PZuOP/Lf42OIVM48qUhqRH7eEt0VvhUdZw5Knk3HMwOdM1Upq2eD8RVFDJUnS06rGMMb5jJzbv3qjGHWs1+dlXY6tcz08SxrlTJCt3vyOGlv1s74JW7n6Pw7PHD8U67jjzz+OIv+UId+GWQSNdT4lnWcMdR4Vh3PCF/+kHgMkcpZLOSTpc/1vZSaaksF+96yjjMGJc+q45mhxhmrRHEjULMxlElWvrCJzAA1nelNzelXz5Jzi1dnDrPOWCYtkTJ3mrngkrlKWUO3N0kyV5ozae42jc6/0wPHP/U6joHxtCPNH/KJwOjX2hGLYFmsz0DgeKzjGBhPOR5ex5nftMfaIUr+GQgcj3UcA+Mpx0PpOPS0MLn7EbZ7YPbtXr8tAes4BgYGxs4G1nEMDAyMnQ2s4xgYGBg7G1jHMTAwMHY2sI4/WnwmJk0+i/hUOuZY/9r0xo+nN348HeAfe9wX2xp2QpU+ExHAnyywjj8MHlMUTcbrZISa2GKVqMGBGHeb7kg82Hq29NwtPKgjGz+e3nBXoMRXOwMo0dr/6qbFZcvZwttY6yx4gLtgqs+Ppzd+PK1oyV7PT6dK2cpMVYmXNZTDg1fpMxAB/MkC6/jD4FPR8QfbjpBepWLFrVu3bhGb6FK7oXc4HkTH0/NWKFIaVKFAKlOhINXz1c7AZiKVNWcB33oftd0SqFXKrOenVqVj/WuonAK+FSkvtfD7jBAPWqWdHd7kieOp1fFtHQ05o6ZMP/GMMhmrVKy4dUvBVsCgFgp26hF2a7eZlpNhh/P9Iqoz1vOWQhEj9lx/kBm+4JOFWWeoJ61jCRzrXyOe6EkxoqhSAd+asogzwZQTHlB4P1s1Oygyx1TPJ1ElVgsPnd7Co0jwpkPLg1dpp0cAf7J4anV8e0dDzrxmmjhlrSeDPR5js4oVMYUilgoW+iC3mSV01xYjqjNciPDuoOybVukBwqxnaUNmQ6/WTXNWkOpZ657eWOvsd2f1Jm+S81HY4+nimFbPJ1ElSiGkoCN1zqrjn6RKOzwC+JPF06vjxfK335YXszqib7/9drSD+Fgsf/t9Kt6WQwnoiFISox2pMlIfiHxEAvllljIpWbda4dTZ2eqZUSV0FSL5E9wmykurK9NtMt4R04WIMzqixMfsVWK+EFPLM9aTsVLH+laT665yFotV40qur7ILWKwCnmXdVV7jSqX7eVl0PHtO+BXjWVsEvQSGen76VWI1c9d/xK2hXutHyfUfJf08tvxHlr5sOv5JqoR+DxifAE+vjrM6Iu9FOs7IIrIO2fciHR2R9yIdLFZH5L3vyc4wZCVSz8i+916E0AXah1ShaV8yl0nN+kCV3qSeDFVKvwr8/GC3SV75PSKN6TYZ74jpQsQZ6Lszsu99T3Yme5UYLsRUP8Z6MlXqVIfvhxxCmMplP5ySNbNYzZzVH075uK+wWCwW65Uby1OyZqbCWZvlPM41rzofQjRPdfh+aL5xivoxo56fbpWOc82rqTpk1jbLV5+wSll/0xj3xY7X8Rc/MYokb74ZCoUkRS8WSUKh0JtvSopefPHFttDt26G2jJy34bcvtoVuU79vCxFfpBKIb4skb6JjpjJpWemoFi8tLYmrs9T5dvZ6MlUp/Sro84PdJiUDeUcwZ5HkzVROpjtiuBBRDCqkSAKbnvGOGNuT4Taz1JMp48l2zw+MvSfTjsskZGLj5PIPJlPN3zi5/IOYpJH8nDVnPse4bC9LrwxzUzKg2h6jnc5cz0+vSvkcI60daDjauxjzcI6mEh6ySi+m9y9Zz6y9jEHBjtTxR3Tv1/0//enrotMvvvjiadHrP/2p/zpMPi16/acE4NcwK0oQ+cmctMww63U/rZz7lEkpKIVXuh3z8/PCSmo1U0idwlRmRpWolaBfdau3Sc2XKopMpTYI8x1lXIio03X/T18XnX7xtOh1dH2GKmVpT4aWZ67ni+RlKDg2rlv4b2FI0TUitbDViRJ13YXpmVPZNs9pucR8+4w9TUVhq5NeWtZ6fjpVShVIrUBe9xxDfR5BlTK6d6v1xHjxxRd3oo4z3sbfYGBkw6uC9R97Wp7Y5Vs8P36Sl2fC9qzSuuDVtMRXBesMqRiZ2Ek6vkX5/ioGBh0nOUs/sDc+mev+4AdLnJOf/qWzYRtW6atf/Wqj/QdpHbQ967ltsWN0fBMFz3ZvX/nKVz7NpsTYzmgw/7254UlXAoMRuG8eGjtDxxkVnHobX2HCl7/8ZcZ0DAwMjM8SwLe3N14m8BKBb33rW9/61re++c1vfvOb3/zGN77xjW984+tf//rXv/71/xMDAwPjqcS21nFGEScVnNTur33ta1/72tf+DwJP+uEBAwMD41MF+OZ2xTcooFrcULJZLBb0sUCnypcJfAkDAwPjKcMO0PFMEYcKDuX7i1/84gsvvPD8888///zzX9iu+GpN69/ebP3bm63fyHui9fj2pV7O1eOPtMjjVyklfvtSb++lbz/S8jEwMO6LnaTjpP/kb/7mb6CCf+ELX/jrv/7rz+3atTU+87ldz3zumWc+98zuz+3evWv3nl179ux69lkG7iHI+G0qw57szCxh7669e3ft3ctU2p5de/bs2r1n1+7dn3tm965ndu/avXvX7j3P7N6ze8+ze57d++zefXv3Pbd333P79j2377nn9j333L59z+3dt2/v3n3P7t337N69zz67dw+dzz6799m9e59FGfbt3fvc3n3P7Xvur0k+99xfPweP9z23d99ze/eSpWUW+OyePc/u2fPsboLw455nIdMuTXybyr/nmd2Qu5+Bd/fMM7tgX+x6Zst990j4KV8Oc+t8hs4nXp8dxu2u44zG+Je//OUXXnjhC1/4wq5dzzz/wgsyufzD3/72w9/+9s6du5vxLsl7d+7du3Pv3p2PP35Y3iN5L40fUQ4+uvfxRx+TvPfRxzCRwrt3P7p796M7dz+6c+ejO3c+ugOP7965e/fu3Xt373187+P/ee/j//kxwXsff3zv44/v3fv47r17iHc35b17d+99fI+BqXNRy9y9m847d++kKkbhR3c++ujOP3/0UYr/jPhbxH/+7W//GXbNhx/+9jcffvib33z469/85te//s2vfv2bX/3617/61a9/+atf/fJXv/rlLxE/SPGXH/zylx988MsPPvjl+yl+gPj+B++//8EviL+/eP+DX7z/foq/QHyPgb9AfI/Gn2/G937+3ns///lm/Kes/Hk6/+lByYDbW+RtBv7sgXmbmT/Lkg6/elCic9FFUW0p98KEB2/MzO5g4Ca9+R5TJ9IafKutR7nZR8JtquOMxjh0i3/1q1+Flvjndu1SqTXv/sMPnS6vSCITSWR8oYQvlPCFYh4DJXyxlC+RCaQKgVwpVKmFaq1QpxcbTWKTSWwySUwmidksMZulZrPUapVarTKbTWa3y+x2OZ3wW6nVKrVYpBaL1GpBBxaLxGKGhcAyEc0mkdkkMpsJmkRmk8hkRDQahAaDQK8XaDR8lYonVwjkCqFcKZQpRTKVXKVT6Yw6o81odZptTovdZXO6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" alt="" />
小结
观察者模式定义了对象之间一对多的依赖,当一个状态发生改变时,它的所有依赖都会收到通知并自动更新。
观察者模式的作用,当两个对象之间松耦合,它们依然可以交互,但是不用关注彼此之间实现的细节。
观察者模式(Observer pattern)的更多相关文章
- 设计模式 - 观察者模式(Observer Pattern) 详细说明
观察者模式(Observer Pattern) 详细说明 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26583157 版权全部 ...
- 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)
原文:乐在其中设计模式(C#) - 观察者模式(Observer Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 观察者模式(Observer Pattern) 作者:weba ...
- 设计模式 - 观察者模式(Observer Pattern) 详细解释
观察者模式(Observer Pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26583157 版权全部 ...
- 设计模式-观察者模式(Observer Pattern)
观察者模式(Observer Pattern):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己. 观察者 ...
- jQuery中的观察者模式(Observer Pattern)
在jQuery中,on方法可以为元素绑定事件,trigger方法可以手动触发事件,围绕这2个方法,我们来体验jQuery中的观察者模式(Observer Pattern). ■ on方法绑定内置事件, ...
- 设计模式 - 观察者模式(Observer Pattern) Java内置 用法
观察者模式(Observer Pattern) Java内置 用法 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26601659 ...
- 二十四种设计模式:观察者模式(Observer Pattern)
观察者模式(Observer Pattern) 介绍定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新. 示例有一个Message实体类,某些对象 ...
- 使用C# (.NET Core) 实现观察者模式 (Observer Pattern) 并介绍 delegate 和 event
观察者模式 这里面综合了几本书的资料. 需求 有这么个项目: 需求是这样的: 一个气象站, 有三个传感器(温度, 湿度, 气压), 有一个WeatherData对象, 它能从气象站获得这三个数据. 还 ...
- php观察者模式(observer pattern)
... <?php /* The observer pattern implements a one-too-many dependency between objects. The objec ...
- 设计模式系列之观察者模式(Observer Pattern)
意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. 主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作 ...
随机推荐
- 《OOC》笔记(0)——为何要看这本书
<OOC>笔记(0)——为何要看这本书 <OOC>全名是<Object-oriented Programming with ANSI-C>,作者Axel-Tobia ...
- iOS app 程序启动原理
iOS app 程序启动原理 Info.plist: 常见设置 建立一个工程后,会在Supporting files文件夹下看到一个"工程名-Info.plist"的文件, ...
- 判断当前日期是否在[startDate, endDate]区间
/** * 判断当前日期是否在[startDate, endDate]区间 * * @param startDate 开始日期 * @param endDate 结束日期 * @author jqli ...
- Linux网络编程系列-TCP编程实例
实例: client #include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #inc ...
- java 堆栈分析4
jprofiler ,又是一款好工具... —— 不过显然,我觉得有了jvisualvm就足够了,难道它会比jvisualvm还强大很多!?? 什么时候需要它呢?它有什么特别好用的地方吗? 带来什么方 ...
- 运用JS设置cookie、读取cookie、删除cookie
JavaScript是运行在客户端的脚本,因此一般是不能够设置Session的,因为Session是运行在服务器端的.而cookie是运行在客户端的,所以可以用JS来设置cookie. 假设有这样一种 ...
- Redis学习笔记~StackExchange.Redis实现分布式Session
回到目录 对于多WEB的环境现在已经是必须的了,很难想像一台WEB服务器面对百万并发的响应,所以,我们需要多台WEB服务器集群合作,来缓解这种高并发,高吞吐的场景,而对于多WEB的场景又会有个问题出现 ...
- Redis学习笔记~常用命令总结
回到目录 客户端redis-cli常用的命令总结 连接到服务器 redis-cli -h 127.0.0.1 -p 6379 --连接指定的redis服务器 发布/订阅, pub/sub模式运行在re ...
- 知方可补不足~SQL为大数据引入分区表
回到目录 一些概念 分区表在oracle和sqlserver中都上存在的,当数据表的数据量过大时,上千万,上亿的数据,在进行数据查询时需要显得比较慢,性能很差,这时是时候引入分区表了,分区表顾名思义, ...
- 《Effective Java》—— 对于所有对象都通用的方法
本节主要涉及Object中通用的一些方法,比如equals,hashCode,toString,clone,finalize等等 覆盖equals时请遵守通用约定 equals方法实现的等价关系: 自 ...