设计模式概述及详解-持续更新

来源:互联网 发布:lovecloud是什么软件 编辑:程序博客网 时间:2024/05/18 03:43

简单工厂模式和工厂模式

客户端提供一个条件给工厂,工厂根据条件返回客户端需要的对象。
它根据客户端传入的参数,生成不同的对象,调用对象的方法。

Calc add = CalcFactory.createCalc("add");  calc.calc(2,5);  Calc reduce = CalcFactory.createCalc("add");  calc.calc(6,5); 

工厂模式是简单工厂模式的一种扩展,一个工厂生产一个对象,符合设计模式的开闭原则。

AddFactory addFactory = new AddFactory();Calc add=addFactory.createCalc();add.calc(2,5);ReduceFactory reduceFactory = new ReduceFactory();Calc reduce=reduceFactory.createCalc();reduce.calc(5,2);

详解:http://blog.csdn.net/chijiandi/article/details/78841861

策略模式

客户端提供一个对象策略给Context环境类,Context根据策略调用方法。

Context context=new context(new Add());  context.calc(2,5);  Context context=new context(new Reduce());  context.calc(6,5); 

根据客户端传入的对象,实施不同的策略,调用方法。与简单工厂模式的不同在简单工厂根据参数暴露了对象给客户端,策略模式根据策略暴露具体的方法,但是要求客户知道策略的名称,可与与工厂模式一起使用。

单例模式

对某个类来说,其实例化对象有且仅有一个,并只提供一个创建它的方式。
对于单例模式的写法很多,概述为
懒汉单例模式
饿汉单例模式
双重校验锁
静态内部类
枚举
详解:http://blog.csdn.net/chijiandi/article/details/78834661

适配器模式

当开发后期,两个功能相似的接口因为都不太容易改,或当调用别人类似功能的接口时,通过适配器模式返回客户端一致的接口。
比如两个接口分别是:
void SayChinese();
void SayEnglish();
那么创建一个适配器Translator翻译 实现sayChinese接口

private English english;  public Translator (English english){      this.english=english;  }  public void sayChinese(){      english.sayEnglish();  }  

最后的实现效果即为:

People a = new Chinese();  Translator b = new Translator b(new English());  a.sayChinese();  b.sayChinese();  

通俗的说就是把sayEnglish让适配器以sayChinese的形式展示给客户端。
详解:http://blog.csdn.net/chijiandi/article/details/78832952

代理模式

代理模式把客户端不容易进行交互的类通过代理与之进行交互
简单的代理运用可以理解为代购买东西,别人看到的是代购买了很多东西,代购其实花的是你的钱买东西。
代理模式是开放-封闭原则的具体实现之一。
可以理解为,代理扩展了原类的方法而不改变原类,
又或者说,代理保护了原类。
我将其放在适配器模式下是因为他们有一些地方比较像
以下是代理类

/*** @ClassName: Proxy * @Description: 代购,帮Person买苹果* @author cjd* @date 2017年12月18日 下午5:02:49   */public class Proxy implements BuyApple {    private Person person;    public Proxy(Person buyer) {        this.person = buyer;    }    @Override    public void buyApple() {        System.out.println("出国");        person.buyApple();        System.out.println("回国把苹果8交给" + person.getName());    }}

其中同样内置了一个对象,可代理模式是在实现Person的原功能下进行扩展,
而适配器模式是将一个接口转换成另一个接口,当类的功能多了,两者的差异也会变大。
详解:http://blog.csdn.net/chijiandi/article/details/78838885

原创粉丝点击