美文网首页っ碎片化代码
A03—工厂方法模式(Factory Method Patter

A03—工厂方法模式(Factory Method Patter

作者: 白晓明 | 来源:发表于2019-04-21 16:14 被阅读1次

意图:定义一个创建对象的接口,让其子类自己决定实例化那个类,工厂模式使其创建过程延迟到子类进行。
主要解决: 接口选择问题。
何时使用: 明确知道和条件下创建不同实例时。
如何解决: 让其子类实现工厂接口,返回的也是一个抽象对象。
关键代码: 创建过程在其子类执行。
优点: 良好的封装性,代码结构清晰;扩展性高;屏蔽对象的具体实现,只关心对象的接口;解耦框架。
缺点: 每次增加一个不同的框架时,都需要增加一个具体类和对象实现工厂,类的个数成倍增加,增加了系统的复杂度,同时也增加了系统具体类的依赖。
应用实例: 我们去茶馆喝茶,我们只需要说出茶的名称,并不需要知道服务员在上茶之前做的所有过程。

1. 创建一个接口TeaInterface
public interface TeaInterface {
        //茶的颜色
        void getColor();
}
2. 创建实现接口的实体类LongjingTieguanyinKeemum black tea
public class Longjing implements TeaInterface{

    @Override
    public void getColor() {
        System.out.println("龙井茶绿色");
    }
}

public class Tieguanyin implements TeaInterface{

    @Override
    public void getColor() {
        System.out.println("铁观音青色");
    }

}

public class KeemumBlackTea implements TeaInterface{

    @Override
    public void getColor() {
        System.out.println("祁门红茶红色");
    }
}
3. 创建一个工厂,生成基于给定信息的实体类对象。
public class MakeTeaFactory {

    //使用getTeaColor方法获取茶颜色的对象
    public TeaInterface getTeaColor(String teaName) {
        if(teaName == null) {
            return null;
        }
        switch (teaName) {
        case "Longjing":
            return new Longjing();
        case "Tieguanyin":
            return new Tieguanyin();
        case "KeemumBlackTea":
            return new KeemumBlackTea();
        }
        return null;
    }
}
4.使用该工厂,通过传递茶名来获取实体类的对象
public class DrinkTea {

    public static void main(String[] args) {
        MakeTeaFactory mtf = new MakeTeaFactory();
        
        //获取绿茶
        TeaInterface ljt = mtf.getTeaColor("Longjing");
        ljt.getColor();
        
        //获取红茶
        TeaInterface kbt = mtf.getTeaColor("KeemumBlackTea");
        kbt.getColor();
        
        //获取青茶
        TeaInterface tgyt = mtf.getTeaColor("Tieguanyin");
        tgyt.getColor();
    }
}
5. 运行程序,查看结果
龙井茶绿色
祁门红茶红色
铁观音青色

相关文章

网友评论

    本文标题:A03—工厂方法模式(Factory Method Patter

    本文链接:https://www.haomeiwen.com/subject/pfkjgqtx.html