簡單工廠模式:
- 用一個單獨(dú)的類完成創(chuàng)建實(shí)例的過程
// Example
// 創(chuàng)建基類
public class Father{...}
// 根據(jù)情況創(chuàng)建對應(yīng)的子類面褐,并覆寫必要的方法
public class Son1 : Father {...}
public class Son2 : Father {...}
// 創(chuàng)建工廠類寄摆,工廠類根據(jù)情況創(chuàng)建需要的實(shí)例
public class Factroy
{
Father father = null;
swith(operate)
{
case "Son1":
father = new Son1();
case "...":
father = ...
}
// 后續(xù)操作
}
策略模式:
- 分別定義和封裝算法家族作烟,這些算法完成相同的工作部翘,只是實(shí)現(xiàn)不同
- 由一個Context類來負(fù)責(zé)維護(hù)需要使用的算法類,而減少客戶端的影響科平,簡化了單元測試
// Example
// 創(chuàng)建抽象類
pulic abstract class Father
{
//定義需要實(shí)現(xiàn)的方法
}
// 創(chuàng)建不同算法的類繼承抽象類,實(shí)現(xiàn)對應(yīng)的方法
public class Son1 : Father{...}
public class Son2 : Father{...}
// 創(chuàng)建維護(hù)類姜性,有維護(hù)類保持對算法類的控制瞪慧,根據(jù)情況創(chuàng)建需要的算法
public class Context
{
// 保有對算法的引用
Father father;
// 創(chuàng)建的時(shí)候傳入需要的實(shí)例
public Context(Father father)
{
this.father = father;
}
}
裝飾模式:
- 動態(tài)的給某對象添加額外的職責(zé)的模式
- 將類中的裝飾功能分離,留下核心的功能
- 在根據(jù)需要動態(tài)的改變類所需要的裝飾功能部念,去除重復(fù)的邏輯
- 主體維持一個裝飾(或?yàn)榭眨┢茫b飾維持一個裝飾(或?yàn)榭眨?/li>
// Example
// 抽象類定義操作方法
abstract class Component
{
public abstract void Operation();
}
// MainObject類定義被裝飾對象并添加職責(zé)
class MainObject : Component
{
public overrive void Operation()
{
......
}
}
// Decorator類用來裝飾抽象類,繼承Component
abstract class Decorator : Component
{
protected Component component;
public void SetComponent(Component component)
{
this.component = component;
}
public override void Operation()
{
if(component != null)
{
component.Operation();
}
}
}
代理模式:
- 為其他對象提供一種代理以控制對這個對象的訪問
- 為一個對象在不同的地址空間提供局部代表
- 可以隱藏一個對象存在于不同地址空間的事實(shí)
- 用來控制真是對象訪問時(shí)候的權(quán)限
- 當(dāng)調(diào)用真實(shí)對象的時(shí)候儡炼,代理可以處理另外I的事情
// Example
// 定義代理和引用對象的共同接口
abstact class Subject
{
public abstract void Request();
}
// 真實(shí)調(diào)用的類
class RealSubject : Subject
{
public override void Request()
{
...
}
}
// 代理類
class Proxy : Subject
{
RealSubject realSubject;
public override void Request()
{
if(realSubject == null)
{
realSubject = new RealSubject();
...
}
realSubject.Request();
}
}
工廠方法模式