设计模式自总结

简单工厂模式:
根据参数的不同返回不同类的实例
1.初始化时候加载一些属性,用的时候,直接从工程类中获取。
例如:QualificationFactory,init的时候把不同的Qualification[]数组都初始化好,
比如,基础资质项:basicQualifications Qualification[],店铺资质项:shopQualifications Qualification[]用的时候可以直接get。。。。
2.返回的是一个抽象类,根据方法入参的不同,new一个这个抽象类的实现类返回。
缺点:一旦增加新类要动工厂逻辑。

抽象类工厂模式:


单例模式:
饱汉,饿汉  模式。

代理模式:
1.定义一个统一的接口 2.定义一个真实的角色实现这个接口 3.代理角色也实现这个接口,把真实角色注入,然后在代理方法里调用真实角色的方法。

//定义了接口
 2 interface SaleTowelIntertace
 3 {
 4     void sellTowel();
 5 }
 6 //毛巾的生产类
 7 class TowelProduce : SaleTowelIntertace
 8 {
 9     string ConsumerName;
10     TowelProduce(string consumer_name)
11     {
12         ConsumerName = consumer_name;
13     }
14     void sellTowel()
15     {
16         Console.WriteLine("毛巾卖给了{0}",ConsumerName);
17     }
18 }
19 //卖毛巾的代理类
20 class TowelSaleProxy : SaleTowelIntertace
21 {
22     TowelProduce tp;
23     TowelSaleProxy(string consumner_name)
24     {
25         tp = new TowelProduce(consumer_name);
26     }
27     void sellTowel()
28     {
29         tp.sellTowel();
30     }
31 }

抽象角色:声明真实对象和代理对象的共同接口。
代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象        可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。
真实角色:代理角色所代表的真实对象,是我们最终要引用的对象。

代理模式的一个好处就是对外部提供统一的接口方法,而代理类在接口中实现对真实类的附加操作行为,从而可以在不影响外部调用情况下,进行系统扩展。也就是说,我要修改真实角色的操作的时候,尽量不要修改他,而是在外部在“包”一层进行附加行为,即代理类。例如:接口A有一个接口方法operator(),真实角色:RealA实现接口A,则必须实现接口方法operator()。客户端Client调用接口A的接方法operator()。现在新需求来了,需要修改RealA中的operator()的操作行为。怎么办呢?如果修改RealA就会影响原有系统的稳定性,还要重新测试。这是就需要代理类实现附加行为操作。创建代理ProxyA实现接口A,并将真实对象RealA注入进来。ProxyA实现接口方法operator(),另外还可以增加附加行为,然后调用真实对象的operator()。从而达到了“对修改关闭,对扩展开放”,保证了系统的稳定性。我们看客户端Client调用仍是接口A的接口方法operator(),只不过实例变为了ProxyA类了而已。也就是说代理模式实现了ocp原则。

好处:
1.ocp原则(对修改关闭,对扩展开放),新功能可以在代理上加逻辑,而真实对象的方法不动,减少风险。
2.可以在代理里面添加外围逻辑,比如打印日志(代理类可以直接配置log4j记录日志)或者计算类调用时间等。

 

责任链模式:

观察者模式:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值