zoukankan      html  css  js  c++  java
  • Java 设计模式之 简单工厂模式(静态工厂方法模式)

    简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类(或者父接口)

    简单工厂模式的  UML 图:

    (1)抽象(Product)产品角色:简单工厂模式所创建的所有对象的父类,注意,这里的父类可以是接口也可以是抽象类,它负责描述所有实例所共有的公共接口。

    (2)具体产品(Concrete Product)角色:简单工厂所创建的具体实例对象,这些具体的产品往往都拥有共同的父类。

    (3)工厂角色(Creator):这是简单工厂模式的核心,由它负责创建所有的类的内部逻辑。当然工厂类必须能够被外界调用,创建所需要的产品对象。

    代码:

    (1)抽象产品角色:

    package com.liwei.factory.simple;
    /**
     * 抽象(Product)产品角色
     * 负责描述所有实例的公共接口
     * @author Administrator
     *
     */
    public interface Doll {
        public void getInfo();
    }

    (2)具体产品角色

    package com.liwei.factory.simple;
    
    public class BarbieDoll implements Doll {
    
        @Override
        public void getInfo() {
            System.out.println("我是芭比娃娃");
        }
    
    }
    package com.liwei.factory.simple;
    
    public class ClothDoll implements Doll {
    
        @Override
        public void getInfo() {
            System.out.println("我是布娃娃");
        }
    
    }

    (3)工厂角色:

    package com.liwei.factory.simple;
    
    public class DollFactory {
        public static Doll getInstance(String name){
            if("barbie".equals(name)){
                return new BarbieDoll();
            }else if("cloth".equals(name)){
                return new ClothDoll();
            }else{
                return null;
            }
        }
    }

    (4)测试类:

    package com.liwei.factory.simple;
    
    public class Client {
        public static void main(String[] args) {
            Doll doll1 = DollFactory.getInstance("cloth");
            doll1.getInfo();
            Doll doll2 = DollFactory.getInstance("barbie");
            doll2.getInfo();
        }
    }

    由原来的直接依赖,变为依赖工厂了。只是把依赖关系转移了。

  • 相关阅读:
    POJ 1654 Area 多边形面积 G++会WA
    POJ 3348 Cows 求凸包面积
    POJ 1279 Art Gallery 半平面交 多边形的核
    hdu 1556 Color the ball 线段树 区间更新
    POJ 1474 Video Surveillance 半平面交
    POJ 3130 How I Mathematician Wonder What You Are! 半平面交
    在React项目中,如何优雅的优化长列表
    react高亮显示关键词
    通过a标签同源和跨域下载服务器文件(基于blob)
    前端性能优化之回流和重绘
  • 原文地址:https://www.cnblogs.com/liweiwei1419/p/4474203.html
Copyright © 2011-2022 走看看