模式开始

来源:互联网 发布:图片锐度调节算法 编辑:程序博客网 时间:2024/05/29 12:45

引用大佬的blog:http://blog.csdn.net/lovelion/article/details/17517213




1.简单工厂模式:又称为静态工厂方法,在简单工厂模式中用于创建实例的方法都是静态方法
属于类创建型模式但是不属于GOF


简单工厂的改进: 
1.1.在创建具体对象时,没更换一个对象就需要修改客户端代码中静态工厂方法的参数,客户端代码
将要重新编译吗,对于客户端而言,违反了"开闭原则"  
   一种常用的改进:将静态工厂方法的参数存储在XML或者properties格式的配置文件中
再通过一个xmlUtils工具类来读取配置文件中的字符串参数


1.2.为了简化简单工厂模式,我们可以将抽象产品类与工厂类合并,将静态工厂方法移至抽象产品类中


今日task:简单工厂模式的简化在JDK的应用 具体是什么找两个例子看看






2.工厂方法模式:不再与简单工厂一样提供一个统一的工厂类来创建所有的产品对象,而是
针对不同的产品提供不同的工厂,系统提供一个与产品等级结构对应的工厂等级结构
是一个类创建型模式
核心:1.产品类(或接口) 具体产品自定
     2.工厂(职责:创建产品)所以可以声明为一个接口 具有创建对象的职责(抽象方法)
具体工厂 实现 工厂接口,返回的产品类型为产品类的实现类
2.1 记代码的问题:
1.将工厂方法声明为static修饰的方法,这个时候会有编译异常:
This method requires a body instead of a semicolon(这个方法需要一个主体而不是一个分号)
 问题分析:在jdk 1.8中 接口中static和default的方法需要有方法体 但是必须用接口.method()来调用
而在jdk1.7及一下版本则不能在接口中定义static方法


2.2延伸:static的另一个用法 是在jdk1.5引入的新特性 静态导报
import static  包名


2.3 工厂方法的隐藏
有时候为了进一步简化客户端的使用,还可以对客户端隐藏工厂方法,此时,在工厂类中将直接调用
产品类的业务方法,客户端无需调用工厂方法创建产品,直接通过工厂即可使用所创建的对象中的
业务方法


2.4总结 工厂方法模式是使用平率最高的设计模式之一,很多开源框架和API类库的核心模式
基于工厂角色和产品角色的多态性设计是工厂方法模式的关键,工厂方法模式之所以又被称为多态工厂
就正是因为所有的具体工厂类都具有同一个抽象父类


今日Task:使用工厂方法模式设计一个程序来读取各种不同类型的图片格式


3.抽象工厂模式:扩展了工厂方法模式:抽象工厂中的工厂实现类可以生成很多个不同的产品
各个工厂实现类生产的产品是一个产品族,不同的产品则是不同的产品等级/层次