zoukankan      html  css  js  c++  java
  • 设计模式——工厂方法模式

    知识点:工厂方法模式创建对象

    (一)什么是工厂方法模式

    定义一个创建产品对象的工厂接口,子类工厂实现接口来创建具体的产品对象

    (二)角色

    抽象工厂:是工厂方法模式的核心,创建具体对象的的工厂类必须实现这个接口

    具体工厂:实现抽象工厂接口的具体工厂,用来创建具体产品对象

    抽象产品:具体产品对象拥有的共同父类或者接口

    具体产品:实现抽象产品的接口,包含了产品的具体细节

    产品使用者:使用产品者

    (三)代码实例

    //工厂方法设计模式
    public class FactoryMethodTest {
    public static void main(String[] args) {
    //创建某种工厂,创建对应的产品对象,执行产品对象中的doWork()方法
    PersonWorkFactory stuFac=new StudentWorkFactory();
    stuFac.getWorkClass().doWork();

    PersonWorkFactory teaFac=new TeacherWorkFactory();
    teaFac.getWorkClass().doWork();
    }
    }
    //抽象工厂
    interface PersonWorkFactory{
    Work getWorkClass();
    }
    //具体工厂,生产产品
    class StudentWorkFactory implements PersonWorkFactory{
    @Override
    public Work getWorkClass() {
    return new StudentWork();
    }
    }
    class TeacherWorkFactory implements PersonWorkFactory{
    @Override
    public Work getWorkClass() {
    return new TeacherWork();
    }
    }
    //抽象产品
    interface Work{
    void doWork();
    }
    //具体产品
    class StudentWork implements Work{

    @Override
    public void doWork() {
    System.out.println("学习!");
    }
    }
    class TeacherWork implements Work{
    @Override
    public void doWork() {
    System.out.println("教学生知识!");
    }
    }

    执行结果

    上面的核心工厂PersonWorkFactory不负责产品对象的创建工作,是一个抽象工厂的角色,只负责具体工厂子类实现的接口,这样抽象化的好处使得系统在不修改具体工厂角色的情况下,可以引进新的产品,遵循开闭原则,提高了系统的可扩展性。

    (四)优点
    (1)使用工厂方法创建具体产品对象,隐藏了具体对象的创建细节,只需要关心具体产品对应的工厂
    (2)遵循开闭原则,当加入新的产品类时,只需要同时加入相应的工厂类,实现扩展,无需修改原来的代码,提高了代码的可扩展性

    参考博客:https://www.cnblogs.com/chenxkang/p/6689631.html
    https://www.cnblogs.com/chenpi/p/5141376.html#_label3

  • 相关阅读:
    LINQ to SQL 模拟实现 ROW_NUMBER() OVER(ORDER BY ...) 的功能
    TCP粘包、拆包与通信协议
    Decoder和Encoder
    Future 和 ChannelFuture
    通道Channel
    通道初始化器ChannelInitializer
    数据处理器ChannelHandler
    通道配置项 ChannelOption
    ChannelPipeline
    启动配置类Bootstrap 和 ServerBootstrap
  • 原文地址:https://www.cnblogs.com/shuaifing/p/10844178.html
Copyright © 2011-2022 走看看