首页 > 其他分享 >设计模式结构型[下]

设计模式结构型[下]

时间:2022-12-06 14:31:45浏览次数:47  
标签:Console void public Subsystem1Method new 设计模式 class 结构型


外观模式

概念

外观模式,通过为多个复杂的子系统提供一个一致的接口,使得这些子系统更容易被访问。外部不用关心内部系统的细节,只是使用这个统一的接口就足够了

类图

设计模式结构型[下]_七大原则

代码

class Facade
{
//聚合子类对象
private Subsystem1 subsystem1 = new Subsystem1();
private Subsystem2 subsystem2 = new Subsystem2();
private Subsystem3 subsystem3 = new Subsystem3();

//在这里可以调用子类具体的方法
public void Method()
{
subsystem1.Subsystem1Method();
subsystem2.Subsystem1Method();
subsystem3.Subsystem1Method();
}
}

class Subsystem1
{
public void Subsystem1Method()
{
Console.WriteLine("第一个类的方法");
}
}
class Subsystem2
{
public void Subsystem1Method()
{
Console.WriteLine("第二个类的方法");
}
}
class Subsystem3
{
public void Subsystem1Method()
{
Console.WriteLine("第三个类的方法");
}
}

外观模式主要有三个部分构成。分别是

  1. 外观角色:为多个子系统提供对外接口
  2. 子系统:系统的部分功能
  3. 客户:使用外观角色访问子系统功能。

享元模式

概念

使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。

类图

设计模式结构型[下]_七大原则_02

代码

internal interface IFlyweight
{
void Operation(int extrinsicstate);
}
//具体享元类
class ConcreteFlyweight : IFlyweight
{
//实现享元类的接口,为内部状态增加存储空间
public void Operation(int extrinsicstate)
{
Console.WriteLine("具体Flyweight" + extrinsicstate);
}
}
//实现享元接口,但并不共享,因为Flyweight不强制共享
class UnsharedConcreteFlywight : IFlyweight
{
public void Operation(int extrinsicstate)
{
Console.WriteLine("不共享的Flyweight:" + extrinsicstate);
}
}
//享元工厂,用来创建和管理Flyweight对象。当用户进行请求时、此类负责
//提供一个已创建的实例或者创建一个
class FlyweightFactory
{
//使用hashTable拉力保存对象
private Hashtable flyweights = new Hashtable();
//初始化添加三个实例
public FlyweightFactory()
{
flyweights.Add("X", new ConcreteFlyweight());
flyweights.Add("Y", new ConcreteFlyweight());
flyweights.Add("Z", new ConcreteFlyweight());
}
//根据客户端请求,获得产生的实例
public IFlyweight GetFlyweight(string key)
{
return ((IFlyweight)flyweights[key]);
}

使用享元模式可以大大降低创建重复对象占用的空间

代理模式

概念

为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

类图

设计模式结构型[下]_可扩展_03

internal class Program
{
static void Main(string[] args)
{
Proxy proxy = new Proxy();
proxy.Request(); //调用的实际的请求
}
}

//抽象的接口
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();
}
}


标签:Console,void,public,Subsystem1Method,new,设计模式,class,结构型
From: https://blog.51cto.com/u_15854472/5915764

相关文章

  • 设计模式六大原则详解
    引言对于设计模式,自己很早之前就看了好多本设计模式书籍,其中一些还看了好几遍,也一直希望自己能在编码的时候把这些设计模式用上去。可是,在日常的打码中,用的做多的就是单例......
  • 【每天一个java设计模式(一)】 - 工厂模式
    工厂模式是Java中最常用的设计模式之一。它属于创建型模式,提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同......
  • 【每天一个java设计模式(零)】 - 设计模式基本概念及七大设计原则
    设计模式概述设计模式是什么?它是软件开发人员在软件开发过程中经过相当长的一段时间的试验和错误总结出来的面临的一般问题的解决方案;它是一套被反复使用的、多数人知晓的、......
  • Selenium4+Python3系列(十一) - Page Factory设计模式
    写在前面:PageObject模式,目的是将元素定位和元素操作分层,只接触测试内容,不写基础内容,便于后续对自动化测试用例体系的维护,这是中心思想,也是核心。那么我们继续将简洁延续,......
  • Selenium4+Python3系列(十一) - Page Factory设计模式
    写在前面:PageObject模式,目的是将元素定位和元素操作分层,只接触测试内容,不写基础内容,便于后续对自动化测试用例体系的维护,这是中心思想,也是核心。那么我们继续将简洁延续......
  • 设计模式简单总结
    UML例子该例子主要有继承关系,实现接口关系,依赖关系,组合(合成)关系,关联关系。UML中接口的两种表示方法:简单工厂模式如果只有计算父类和具体的加减乘除子类就已经满足封......
  • [设计模式] 装饰器模式
    一、装饰器模式在软件开发过程中,由于需求的改动,可能面临对某个或某些对象新增一些新的功能的需求。根据开闭原则,新增功能我们也不能直接去修改原有的类,而如果使用继......
  • 【设计模式】——你真的会单例吗?
    【简介】单例模式,属于创建类型的一种常用的​​软件设计​​模式。通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文......
  • 单例设计模式
    单例设计模式什么是单例设计模式所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个实例对象,并且该类只提供一个取得其对象实例的方......
  • 软件设计模式之模拟游角色选择(Darren建造者模式)
    o(︶︿︶)o唉,今天的状态不是很好,但是学习还是要继续的,今天和大家一起分享一下建造者模式,记得之前自己之前一直再想QQ秀换装是怎么是怎么是实现的,今天看了建造者模式我明白了........