zoukankan      html  css  js  c++  java
  • 设计模式-简单工厂模式

    返回上一级目录:Java设计模式

    简单工厂模式,又叫静态工厂模式,是最简单的一种模式,只有3种角色:抽象产品接口,具体产品,工厂角色。

    类关系图如下:

    抽象产品接口,就是定义产品的行为

    /**
     * @Author zhouw
     * @Description 就是一个球
     * @Date 2020-01-17
     */
    public interface IBall {
    
        void say();
    }

    具体产品,具体产品的实现,也就是我们最终要得到的对象,当然不止一个

    /**
     * @Author zhouw
     * @Description 篮球的具体实现
     * @Date 2020-01-17
     */
    public class Basketball implements IBall {
    
        @Override
        public void say() {
            System.out.println("我是一个篮球,又被扔进筐里");
        }
    }
    /**
     * @Author zhouw
     * @Description 足球的具体实现
     * @Date 2020-01-17
     */
    public class Football implements IBall {
    
        @Override
        public void say() {
            System.out.println("我是一个足球,被踢来踢去");
        }
    }

    工厂角色,工厂负责创建所有的产品实例

    /**
     * @Author zhouw
     * @Description 球类工厂,负责生产各种球类,由于这个方法一般都是静态的,所以也叫静态工厂
     * @Date 2020-01-17
     */
    public class BallFactory {
    
        public static IBall createBall(String name) {
            if ("football".equals(name)) {
                return new Football();
            } else if ("basketball".equals(name)) {
                return new Basketball();
            }
    
            // 默认创建Football
            return new Football();
        }
    }

    最后就是应用了

    public class Application {
    
        public static void main(String[] args) {
            IBall ball1 = BallFactory.createBall("football");
            ball1.say();
    
            IBall ball2 = BallFactory.createBall("basketball");
            ball2.say();
        }
    }

    输出:

    总结

    简单工厂模式的优点就是简单,客户端直接调用静态方法,传入不同的产品名,就可以得到不同的产品,使用方便。通过将创建产品业务和产品本身的业务逻辑分离,降低系统的耦合性。但是缺点也很明显,创建产品的工厂类过于逻辑集中,拓展性很差,如果要再加一个产品“排球”,就要修改工厂创建产品对象的方法,而且如果这个工厂类有问题,就会影响到所有的产品对象的创建。

    返回上一级目录:Java设计模式

  • 相关阅读:
    iOS多线程与网络开发之NSURLCache
    NEFU 117-素数个数的位数(素数定理)
    UISegmentedControl 的使用
    C++使用ADO存取图片
    王立平-- Swift
    浮生猫绘——落入平一的精灵
    BZOJ 1692: [Usaco2007 Dec]队列变换 [后缀数组 贪心]
    POJ2774 Long Long Message [后缀数组]
    BZOJ 2119: 股市的预测 [后缀数组 ST表]
    BZOJ 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式 [后缀数组]
  • 原文地址:https://www.cnblogs.com/zhou-920644981/p/12215535.html
Copyright © 2011-2022 走看看