资讯专栏INFORMATION COLUMN

工厂模式(FactoryMethod)

jhhfft / 2222人阅读

摘要:简单静态工厂方法创建接口或抽象类具体实现类创建工厂调用输出缺点如果要加入新的类,不仅要修改调用代码,还要修改工厂类代码,违反了开闭原则。

一般实现

创建实体类

   public class WithOutEntityA {
        public WithOutEntityA(){
            System.out.println("create WithOutEntityA ...");
        }
    }
    
    public class WithOutEntityB {
        public WithOutEntityB(){
            System.out.println("create WithOutEntityB ...");
        }
    }

调用方法

    public static void main(String[] args) {
        new WithOutEntityA();
        new WithOutEntityB();
    }

输出

    create WithOutEntityA ...
    create WithOutEntityB ...

问题
new操作符是创建对象最常用的方法,但是在一些情况下,new方法会产生一些问题,或者并不能满足需求,也就是说,对象的创建是一个过程,而不是一个操作。

简单/静态工厂方法

创建接口或抽象类

    public interface IEntity {
    }

具体实现类

    public class EntityA implements IEntity {
        public EntityA(){
            System.out.println("create EntityA ...");
        }
    }
    
    public class EntityB implements IEntity {
        public EntityB(){
            System.out.println("create EntityB ...");
        }
    }

创建工厂

    public class SimpleFactory {
        public IEntity create(String type){
            IEntity entity = null;
            if(type.equals("A")){
                entity = new EntityA();
            }else if(type.equals("B")){
                entity = new EntityB();
            }
            return entity;
        }
    }

调用

    public static void main(String[] args) {
        SimpleFactory simpleFactory = new SimpleFactory();
        simpleFactory.create("A");
        simpleFactory.create("B");
    }

输出

    create EntityA ...
    create EntityB ...

缺点
如果要加入新的类,不仅要修改调用代码,还要修改工厂类代码,违反了开闭原则。

工厂方法模式

组成
1.一个抽象工厂类
2.多个具体工厂类
3.一个抽象产品类或产品接口
4.多个具体产品类,每个具体产品类,对应一个具体工厂类

具体实现
定义产品接口

    public interface IEntity {
    }
定义具体产品类
    public class EntityA implements IEntity {
        public EntityA(){
            System.out.println("create EntityA ...");
        }
    }
    
    public class EntityB implements IEntity {
        public EntityB(){
            System.out.println("create EntityB ...");
        }
    }
定义抽象工厂
    public abstract class Factory {
        public abstract IEntity create();
    }
定义具体工厂
    public class FactoryA extends Factory{
        @Override
        public IEntity create() {
            return new EntityA();
        }
    }
    
    public class FactoryB extends Factory{
        @Override
        public IEntity create() {
            return new EntityB();
        }
    }
调用方法
    public static void main(String[] args) {
        Factory factory = new FactoryA();
        factory.create();
        factory = new FactoryB();
        factory.create();
    }
输出
    create EntityA ...
    create EntityB ...

优点
能够轻松构建对象实例,而不必关心对象实例创建的发杂过程,对对象的创建进行了包装,将对象的具体创建过程隔离起来,提高灵活度。

源码

https://github.com/Seasons20/DisignPattern.git

END

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69283.html

相关文章

  • Chap3:创建型设计模式————工厂方法设计模式(上)

    摘要:利用工厂方法模式,请求者发出请求,而不具体创建产品。正是因为这个原因,使用工厂方法模式可以简化复杂的创建过程,关键就在于它在维持一个公共接口。 创建型设计模式 包括以下五种: 抽象工厂 生成器 工厂方法 原型 单例 我们选择工厂方法和原型模式作为将用PHP实现的创建型设计的例子工厂方法模式是这5个设计模式中唯一的一种类设计模式原型模式属于对象类模式,可以使用PHP_clone方法实...

    A Loity 评论0 收藏0
  • Java 设计模式工厂模式

    摘要:与以往的使用的方式不同,工厂模式使用工厂实例化对象。抽象工厂模式亮相抽象工厂模式抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。 写在前面 这篇博文介绍设计模式的形式将与其他篇博文不太一样,这里我们将从一个问题入手,逐步了解到简单工厂、工厂方法与抽象工厂模式。 PS:这篇博文涉及的内容较多,所以篇幅有点长,请耐心阅读。 为什么要使用工厂模式? 在 OO ...

    Jochen 评论0 收藏0
  • 《重构---改善既有代码的设计》

    摘要:为何重构重构有四大好处重构改进软件设计如果没有重构,程序的设计会逐渐腐败变质。经常性的重构可以帮助维持自己该有的形态。你有一个大型函数,其中对局部变量的使用使你无法采用。将这个函数放进一个单独对象中,如此一来局部变量就成了对象内的字段。 哪有什么天生如此,只是我们天天坚持。 -Zhiyuan 国庆抽出时间来阅读这本从师傅那里借来的书,听说还是程序员的必读书籍。 关于书的高清下载连...

    baihe 评论0 收藏0
  • JavaScript工厂模式

    摘要:基于工厂角色和产品角色的多态性设计是工厂方法模式的关键。工厂方法模式之所以又被称为多态工厂模式,是因为所有的具体工厂类都具有同一抽象父类。工厂方法模式总结工厂方法模式是简单工厂模式的进一步抽象和推广。 JavaScript工厂模式 首先需要说一下工厂模式。工厂模式根据抽象程度的不同分为三种 简单工厂模式 工厂方法模式 抽象工厂模式 1.简单工厂模式 简单工厂模式:又称为静态工厂方法...

    oujie 评论0 收藏0

发表评论

0条评论

jhhfft

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<