• 设计模式二、简单工厂模式——静态工厂模式


    上一篇讲述了设计模式的原则,下面针对常用的设计模式进行描述

    创建型模式:静态工厂模式、工厂方法模式、抽象工厂模式、单例模式、建造者模式

    结构型模式:桥接模式、适配器模式、装饰器模式、代理模式、组合模式

    行为型模式:模板方法模式、策略模式、观察者模式、责任链模式、命令模式、访问者模式

    创建型模式:针对类创建所设计的模式

     简单工厂模式

    设计原则:

      将类的创建统一到一个类内管理,类的创建过程对类的使用者透明。

    示例

    水果实体

    public class Fruits {
    private String name;
    private String shape;

    public Fruits(){
    setName("水果");
    setShape("无");
    }

    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

    public String getShape() {
    return shape;
    }

    public void setShape(String shape) {
    this.shape = shape;
    }
    }

    苹果实体

    public class Apple extends Fruits {
    
        public Apple(){
            setName("苹果");
            setShape("圆的");
        }
    }

    橘子实体

    public class Orange extends Fruits{
    
        public Orange(){
            setName("橘子");
            setShape("圆的");
        }
    
    }

    没有实现静态工厂前,创建苹果和橘子示例

    public class FruitsController {

    public static void main(String[] args) {
    Fruits apple=new Apple();
    System.out.println(apple.getName());
    Fruits orange=new Orange();
    System.out.println(orange.getName());
    }
    }

    创建静态工厂

    public class FruitsFactory {
    public final static int TYPE_APPLE=1;//苹果
    public final static int TYPE_ORANGE=2;//橘子

    public Fruits getFruit(int type){
    if(TYPE_APPLE==type){
    return new Apple();
    }else if(TYPE_ORANGE==type){
    return new Orange();
    }
    return new Fruits();
    }
    }

    通过传入的水果类型返回创建的水果实体——类型为1则创建苹果,类型为2则创建橘子

    通过静态工厂进行水果创建

    public class FruitsController {
    
        public static void main(String[] args) {
           FruitsFactory factory=new FruitsFactory();
        //通过水果类型创建水果 Fruits apple
    =factory.getFruit(FruitsFactory.TYPE_APPLE); System.out.println(apple.getName());
        //通过橘子类型创建橘子 Fruits orange
    =factory.getFruit(FruitsFactory.TYPE_ORANGE); System.out.println(orange.getName()); } }

    特点:

      1、统一由工厂进行实体的创建,便于管理

      2、创建水果实体前需要知道水果对应的类型

      3、增加新的水果需要修改工厂代码:添加类型,增加逻辑判断

    另一种通过方法替换类型来创建实体的静态工厂类

    public class FruitsFactory2 {
    
        public Fruits getApple(){
           return new Apple();
        }
    
        public Fruits getOrange(){
            return new Orange();
        }
    }

    通过该工厂创建实体

    public class FruitsController {
    
        public static void main(String[] args) {
           FruitsFactory2 factory=new FruitsFactory2();
           Fruits apple=factory.getApple();
            System.out.println(apple.getName());
           Fruits orange=factory.getOrange();
            System.out.println(orange.getName());
        }
    }

    特点:

      1、不需要类型进行判断,直接调用对应的方法进行实体创建

      2、可以通过防范备注表明方法的用处

      3、新增水果类型需要添加对应的方法

    总结:

      1、 静态工厂管理实体的创建,可以统一实体创建的管理,让使用者专注类的使用,透明类的创建过程。

      2、静态工厂模式随着业务的新增需要修改代码

      3、该模式不符合设计模式中:单一职责原则——一个水果工厂类管理多个水果实体的创建;开闭原则——每次业务新增都要修改代码

  • 相关阅读:
    计算机中丢失MSVCP110.dll
    应用程序无法正常启动0xc000007b
    查看80端口被占用
    重装系统后搭建php环境
    修改、设置root密码
    安装虚拟机时出现The Microsoft Runtime DLL
    linux网络配置
    Java拾遗
    哈希中的那些序问题
    笔记本电脑安装jupyterthemes
  • 原文地址:https://www.cnblogs.com/yutf/p/11466321.html
Copyright © 2020-2023  润新知