设计模式

来源:互联网 发布:linux中mysql忘记密码 编辑:程序博客网 时间:2024/06/06 03:00

今天整理一下设计模式的知识。

1.首先单例模式,举个栗子:

private static HttpUtils;
public synchronized static HttpUtils getInstantce() {        if (httpUtils == null) {            httpUtils = new HttpUtils(ApplicationXpClient.getInstance());        }        return httpUtils;    }

这是在httputils类里的静态变量的单例模式,一般单例有getInstance()方法判读是否为null,是就新建,否就返回。

2.工厂模式

工厂模式挺多的,先总的来说有:静态工厂模式、简单工厂模式、工厂方法模式、抽象工厂模式。

a.静态工厂模式:这个比较常见,项目中的辅助类,类加静态方法,举个栗子:

TextUtils.isEmpty(String str);
还有如自定义的辅助类,举个栗子,日期工具类拿到当前年份:

DateUtils.getYearString();

/** * 拿到当前年份 * * @return String */public static String getYearString() {    SimpleDateFormat sdf = new SimpleDateFormat("yyyy");    String year = sdf.format(new Date());    return year;}
b.简单工厂模式:以鸿洋的肉夹馍为例子(点击打开链接)

首先你有个卖肉夹馍的店子,然后有肉夹馍这个父类和各种口味的肉夹馍(子类),然后就可以卖了,但是这里有一个问题是,卖肉夹馍的店子的卖肉夹馍方法里需要传入type类型参数,进行判断后再去创建各种口味的肉夹馍,生产肉夹馍的种类和肉夹馍店子这个类耦合太高,如果需要增加或者删除几种风味的肉夹馍,需要不断的修改肉夹馍商店里卖肉夹馍这个方法。怎么解决这个问题呢,我们可以使用简单工厂模式,新建一个肉夹馍简单工厂,传入type,返回肉夹馍。接着在肉夹馍店子里卖肉夹馍这个方法里,拿到肉夹馍,这样就只需要修改工厂类,店子只辅助卖。

c.工厂方法模式:肉夹馍买的好了,在全国各地开了分店,口味也变多了,这时候需要思考问题:10来个城市*5种风味/城市,那么岂不是简单工厂里面需要50多个if,这时候需要使用工厂方法模式。我们先看看他的定义:定义一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法模式把类实例化的过程推迟到子类。举个栗子:父类肉夹馍店,定义了创建对象的一个接口:public abstract RouJiaMo createRouJiaMo(String type),子类GuangZhou肉夹馍店实现这个接口,需要什么口味在子类里面写。当然类肯定很多,比如GuangZhouTianRouJiaMo,GuangZhouLaRouJiaMo等等。是否使用工厂方法模式还要程序员自己判断吧,提高了效率是真的,总之是仁者见仁,智者见智。

d.抽象工厂模式:弄得我有点抽象了,先看下定义:提供一个接口,用于创建相关的或依赖对象的家族,而不需要明确指定具体类。还是以肉夹馍为例子,肉夹馍生产肯定需要原料,新建一个生产原料的接口,2个方法,生产肉和生产原料。然后某肉夹馍原料工厂集成这个接口(比如GuangZhouRouJiaMoYLFactory),有原料工厂,再修改下肉夹馍类的准备方法,调用原料工厂方法。其实我还是有点抽象,先写下来吧,以后理解深入再回来看看。

原创粉丝点击