常用的设计模式----工厂模式

来源:互联网 发布:服务器安装centos系统 编辑:程序博客网 时间:2024/06/01 10:47

工厂模式:

作用:实例化对象,代替new操作


应用场景:以选择脸萌选择【发型】和【面部特征为例】


这里写图片描述

有一组类似的对象(发型),需要在不同的业务场景中动态的创建(客户端选择不同的发型);


随着业务的发展,很难在设计初期就准备好所有种类的接口(发型车间)和实例对象(中分,左分);


考虑到系统的扩展性(增加面部特征)和易维护性(修改,增加发型),这时候应该使用工厂方法模式。


优点:

一个对象的依赖对象发生变化,与本身无关,实现了低耦合

客户端与具体的业务分离,也是实现了低耦合


工厂方法模式:

相当于工厂里的生产车间,真正做事儿的部门



具体实现步骤:

步骤1:创建接口和实现类

接口:

public interface HairInterface {    public void draw();}

实现类:

public class RightHair implements HairInterface {    @Override    public void draw() {        // TODO Auto-generated method stub        System.out.println("-----------------右偏分发型-------------------");    }
public class LeftHair implements HairInterface {    @Override    public void draw() {        // TODO Auto-generated method stub        System.out.println("-----------------左偏分发型-------------------");    }
public class InHair implements HairInterface {    @Override    public void draw() {        // TODO Auto-generated method stub        System.out.println("-----------------中分发型-------------------");    }

步骤2:创建.properties文件,编辑key和value值

key1=value1key2=value2key3=value3例如:left=com.sunny.project.LeftHairright=com.sunny.project.RightHairin=com.sunny.project.InHair

步骤3:创建【方法工厂】

public class HairFactory {/**     * 根据key值生产对象     * @param className     * @return     *//    public HairInterface getHairByClassKey(String key){        try {            //以键值对的格式获取.properties里的值。/            Map<String, String> map = new PropertiesReader().getProperties();            //通过类名获取相应的实例对象(利用反制机制,实现面向对象的多态特性)。/            HairInterface hair = (HairInterface) Class.forName(map.get(key)).newInstance();            return hair;        } catch (InstantiationException e) {            e.printStackTrace();        } catch (IllegalAccessException e) {            e.printStackTrace();        } catch (ClassNotFoundException e) {            e.printStackTrace();        }        return null;    }}

步骤4:用【方法工厂】创建实例对象,并使用对应方法

HairFactory factory = new HairFactory();        HairInterface hair1 = factory.getHairByClassKey("in");        HairInterface hair2 = factory.getHairByClassKey("left");        HairInterface hair3 = factory.getHairByClassKey("right");        hair1.draw();        hair2.draw();        hair3.draw();

抽象工厂模式:

相当于工厂里的指挥部门,为生产车间下达指令


工厂方法模式与抽象工厂模式的区别

如下图所示

这里写图片描述

原创粉丝点击