前言
都知道设计模式有三大家族:创建型、结构型、行为型,在上一篇中我们已经深入了解到了创建型家族中的成员,接下来,小编引领大家接触一个新的家族及其成员–结构型;
内容
1.适配器:
- 定义:将一个类的结构转换成客户希望的另外一个接口,从而使原本由于接口不能在一起工作的类,可以一起工作;
- 结构图:
实例:在NBA我需要翻译
- 代码区:
1. `namespace 适配器模式
{
class Program
{
static void Main(string[] args)
{
Target target = new Adapter();
target.Request();
Console.Read();
}
}
class Target
{
public virtual void Request()
{
Console.WriteLine("普通请求");
}
}
class Adaptee
{
public void SpecificRequest()
{
Console.WriteLine("特殊请求");
}
}
class Adapter : Target
{
private Adaptee adaptee = new Adaptee();
public override void Request()
{
adaptee.SpecificRequest();
}
}
}`
代理模式
定义
为其他对象提供哟中代理以控制对这个对象的访问;
结构图
- 实例:为别人做嫁衣;
- 代码区:
namespace 代理模式
{
class Program
{
static void Main(string[] args)
{
Proxy proxy = new Proxy();
proxy.Request();
Console.Read();
}
}
abstract class Subject
{
public abstract void Request();
}
class RealSubject : Subject
{
public override void Request()
{
Console.WriteLine("真实的请求");
}
}
class Proxy : Subject
{
RealSubject realSubject;
public override void Request()
{
if (realSubject == null)
{
realSubject = new RealSubject();
}
realSubject.Request();
}
}
}
- 装饰模式
定义:
动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活;
结构图
- 实例:约会穿什么比较重要!
- 代码区:
namespace 装饰模式
{
class Program
{
static void Main(string[] args)
{
ConcreteComponent c = new ConcreteComponent();
ConcreteDecoratorA d1 = new ConcreteDecoratorA();
ConcreteDecoratorB d2 = new ConcreteDecoratorB();
d1.SetComponent(c);
d2.SetComponent(d1);
d2.Operation();
Console.Read();
}
}
abstract class Component
{
public abstract void Operation();
}
class ConcreteComponent : Component
{
public override void Operation()
{
Console.WriteLine("具体对象的操作");
}
}
abstract class Decorator : Component
{
protected Component component;
public void SetComponent(Component component)
{
this.component = component;
}
public override void Operation()
{
if (component != null)
{
component.Operation();
}
}
}
class ConcreteDecoratorA : Decorator
{
private string addedState;
public override void Operation()
{
base.Operation();
addedState = "New State";
Console.WriteLine("具体装饰对象A的操作");
}
}
class ConcreteDecoratorB : Decorator
{
public override void Operation()
{
base.Operation();
AddedBehavior();
Console.WriteLine("具体装饰对象B的操作");
}
private void AddedBehavior()
{
}
}
}
外观模式
定义
结构图
- 实例
- 代码区