设计模式-结构型
2023-09-07 22:18:50 3 举报
设计模式-结构型
作者其他创作
大纲/内容
SubComposite
+Operation()
RealSubject2 真实主题
+request(): void
Client 访问类:Facade f = new Facade();f.Method();
.Net适配器模式应用COM Interop,它像是COM和.Net之间的桥梁,采用Adapter模式,对COM对象进行包装,包装类是RCW(Runtime Callable Wrapper),是Runtime生成的一个.Net类,包装了COM组件的方法,并内部实现对COM组件的调用。
public void Method(){ obj1.Method1(); obj2.Method2(); obj3.Method3();}
只有一个具体装饰时,可以将抽象装饰和具体装饰合并
Facade2
- obj2: SubSystem2- obj3: SubSystem3- obj4: SubSystem4
+ Method1(): void+ Method2(): void
Decorator 抽象装饰
-c: IComponent
+Decorator(c: IComponent)+Operation(): void
Client
SubSystem1
- 子系统角色
+ Method1(): void
Children
c0
公共语言运行库
Client 访问类
-客户端
安全式组合模式
Request(){ adaptee.SpecificRequest();}
TwoWayAdapter 双向适配器
-target: ITwoWayTarget-adaptee: ITwoWayAdaptee
+TwoWayAdapter(target: ITwoWayTarget)+TwoWayAdapter(adaptee: ITwoWayAdaptee)+Request()+SpecificRequest()
RealSubject1 真实主题
ConcreteImplementorA
-具体实现化角色
IComponent
+Add(c: Component)+Remove(c: Component)+GetChild(i: int): Component+Operation()
Black
+Paint()
SubLeaf
-name: string
+SubLeafLeaf(name: string)+Operation()
桥接模式将类的抽象部分和实现部分分离开来,使它们可以独立变化。将继承关系转化为关联关系,降低了类之间的耦合度,减少系统中类的数量。实现系统可能有多个角度分类,每一种角度都可能变化,将多个角度分类给分离出来让它们独立变化,减少它们之间的耦合。抽象化:将复杂的一个或几个特性抽出来而只注意其他特性的行动或过程。实现化:对抽象化的具体实现,和抽象化是一个互逆过程。脱耦:将抽象化和实现化之间的耦合分离,由强关联改为弱关联。抽象化(Abstraction)角色:定义抽象类,并包含一个对实现化对象的引用。扩展抽象化(Refined Abstraction)角色:是抽象化角色的子类,实现父类中的业务方法, 并通过组合关系调用实现化角色中的业务方法。实现化(Implementor)角色:定义实现化角色的接口,供扩展抽象化角色调用。具体实现化(Concrete Implementor)角色:给出实现化角色接口的具体实现。
CryptoStream
Client 访问类
+ Operation(): void
ClassAdapter 类适配器
+Request(): void
实体类
集合c0的树状图
RCW实例
+Operation(): void
FlyweightFactory 享元工厂角色
+GetFlyweight(key: string): IFlyweight
ConcreteImplementorB
外观模式提供一个统一的接口,用来访问子系统的一群接口,让使用者与子系统解耦。三层架构就是一个例子。外观(Facade)角色:为多个子系统对外提供一个共同的接口。子系统(Sub System)角色:实现系统的部分功能,客户可以通过外观角色访问它。客户(Client)角色:通过一个外观角色访问各个子系统的功能。
适配器模式通过转接接口,将不吻合的接口或类适配对接,分为类适配器(继承方式)和对象适配器(组合方式)。目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。适配者(Adaptee)类:它是被访问和适配的现存组件库中的组件接口。适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。
Proxy p = new Proxy();p.Request();
互操作程序集元数据
ConcreteComponent 具体构件
+ConcreteComponent()+Operation(): void
BufferedStream
每一个组件都可以单独使用,或者被装饰者包起来使用。
SubSystem3
+ Method3(): void
.Net 类库的System.IO.Stream是装饰者模式的实现,BufferedStream、CryptoStream和GZipStream等span style=\"font-size: inherit;\
ConcreteComponent,是我们将要动态地加上新行为的对象,扩展自Component。
Leaf
+Leaf(name: string)+Add(c: Component)+Remove(c: Component)+GetChild(i: int): Component+Operation()
span style=\"font-size: inherit;\
NetworkStream
复合享元模式
Operation(){ base.Operation(); AddedFunction();}
Square
+Draw()
<interface>IFacade 抽象外观
外观模式
组合
Stream
-抽象接口
<<interface>>IFlyweight 抽象享元角色
+Operation(state: UnsharedConcreteFlyweight): void
Shape
-color: Color
+SetColor(Color color)+Draw()
.Net客户端
SubSystem2
+ Method2(): void
<<interface>>Implementor 实现化角色接口
画图功能:形状(抽象化)和颜色(实现化)
TargetRealize 目标实现
+Request()
+GetFlyweight(key: string): IFlyweight +GetFlyweight(list: List<string>): IFlyweight
SpringAOP
<<interface>>AbstractSubject 抽象主题接口
FileStream
<<interface>>ISubject 抽象主题
ConcreteFlyweight2 具体享元角色
-key: string
+ConcreteFlyweight2(key: string)+Operation(outState: UnsharedConcreteFlyweight): void
UnsharedConcreteFlyweight 非享元角色
-info: string
+UnsharedConcreteFlyweight(info: string)+GetInfo(): string+SetInfo(info: string): void
<<interface>>InvocationHandler 动态代理接口
<<interface>>IComponent
ObjectAdapter 对象适配器
-adaptee: Adaptee
代理模式给一个对象提供一个代理,并由对象控制对原对象的引用。“第三者”代理主要起到一个中介作用,连接客户端和目标对象。抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。真实主题(Real Subject)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。代理(Proxy)类:提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。
ConcreteFlyweight1 具体享元角色
+ConcreteFlyweight1(key: string)+Operation(outState: UnsharedConcreteFlyweight): void
ConcreteDecoratorA
-具体装饰器
+ConcreteDecoratorA(c: IComponent)+Operation(): void+AddedFunction(): void
public void Request(){ PreRequest(); realSubject.request(); PostRequest();}
ConcreteComponent为具体的装饰对象,可以动态地给Component添加功能,ComponentDecorator有一个实例变量,可以记录所装饰的事务
Operation(){ c.Operation();}
+Operation(outState: string): void
装饰者模式动态地将责任附加到对象上,若要扩展功能,装饰者提供了比继承更加有弹性的替代方案,但会产生一些细小的对象,增加系统复杂度。每一个装饰者都 有一个组件,装饰者有一个实例变量以保持某个Component的引用。抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。具体构件(ConcreteComponent)角色:实现抽象构件,通过装饰角色为其添加一些职责。抽象装饰(Decorator)角色:继承抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。具体装饰(ConcreteDecorator)角色:实现抽象装饰的相关方法,并给具体构件对象添加附加的责任。
Proxy 代理类
- realSubject:Subject
+PreRequest(): void+Request(): void+PostRequest(): void
桥接模式
IImplementor impl = new ConcreteImplementorA();Abstraction abs = new RefinedAbstraction(impl);abs.Operation();
ConcreteDecoratorB
-newState: Object
+ConcreteDecoratorB(c: IComponent)+Operation(): void+AddedFunction(): void
<<interface>>ITarget 目标接口
public void Request(){ adaptee.SpecificRequest();}public void SpecificRequest(){ target.Request();}
<<interface>>Target 目标接口
克隆和收藏的同学,请帮忙点个赞哈,感谢!
ObjectAdapter 适配器
+ObjectAdapter(adaptee: Adaptee)+Operation(): void
DynamicProxy 动态代理
- obj: Object
GZipStream
继承
leaf1
Red
Cliet 访问类:Adaptee a=new Adaptee();ITarget t = new ObjectAdapter(a);t.Request();
RealSubject 真实主题
SubSystem4
+ Method4(): void
享元模式运用共享技术有效地支持大量细粒度对象的复用,把类实例外面的参数称为享元对象的外部状态,把在span style=\"font-size: inherit;\
Circle
装饰者模式
leaf2
Interop封送处理
桥接模式与适配器模式结合
RefineAbstraction 扩展抽象化角色
-impl: Implementor
+RefineAbstraction(impl: Implementor)+Operation()
.Net适配器模式应用DataAdapter,ADO.NET为统一数据访问提供了多个接口,最重要的接口之一是IDataAdapter,起到了数据库到DataSet桥接的作用,使应用程序操作统一到DataSet上,与具体的数据库类型无关,甚至可以针对特殊数据源编制到自己的DataAdapter,使应用程序与这些数据源相兼容。
+ConcreteFlyweight2(key: string)+Operation(outState: string): void
Facade1
- obj1: SubSystem1- obj2: SubSystem2- obj3: SubSystem3
leaf3
Cliet 访问类:ITarget t = new ClassAdapter();t.Request();
ITwoWayTarget<<interface>> 目标接口
ConcreteFlyweight 具体享元角色
+ConcreteFlyweight(key: string)+Operation(outState: UnsharedConcreteFlyweight): void
c1
Color
Composite
-children: List<Component>
享元模式
Adaptee 适配者
+SpecificRequest()
COM类型库
IImplementor impl = new ObjectAdapter();Abstraction abs = new RefinedAbstraction(impl);abs.Operation();
+Leaf(name: string)+Operation()
<<interface>>ITwoWayAdaptee 适配者接口
CompositeConcreteFlyweight 具体复合享元角色
Abstraction 抽象化角色
+Abstraction(impl: Implementor)+Operation()
只有一个具体构件而没有抽象构件时,可以让抽象装饰继承具体构件
适配器Operation(){ adaptee.SpecificRequest();}
ConcreteDecorator 具体装饰
+Decorator(c: IComponent)+Operation(): void+AddedFunction(): void
装饰类
UnsharedConcreteFlyweight 非享元角色
代理模式
Adaptee 适配者
适配器模式
透明式组合模式
Composite 的 Operation() 方法代码://递归统一处理容器对象和叶子对象public void Operation(){ foreach (var obj in children) { obj.Operation(); } }
+ConcreteFlyweight1(key: string)+Operation(outState: string): void
Request(){ SpecificRequest();}
单纯享元模式
Rectangle
Facade 外观角色
+ Method(): void
设计模式之结构型模式处理类或对象的组合,包括两种类型,一是类结构型:指采用继承机制来组合接口或实现; span style=\"font-size: inherit;\
Client 访问类ITwoWayTarget target = new TargetRealize(); ITwoWayAdaptee adaptee = new AdapteeRealize();ITwoWayTarget twoWayTarget = new TwoWayAdapter(adaptee);twoWayTarget.Request();ITwoWayAdaptee twoWayAdaptee = new TwoWayAdapter(target);twoWayAdaptee.SpecificRequest();
组合模式
AdapteeRealize 适配者实现
MemoryStream
0 条评论
回复 删除
下一页