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

    简单工厂模式

      我有一个水果工厂负责生产 苹果和橘子

      这个时候我有一个水果的抽象接口,所有水果都来实现这个接口

      

    // 水果的接口

    public interface Fruit {
    public String getTaste();
    public String getName();
    }
    //苹果的实现类

    public class Apple implements Fruit{
    @Override
    public String getTaste() {
    return "我的味道有点甜";
    }

    @Override
    public String getName() {
    return "我的名字叫苹果";
    }
    }
    //橘子的实现类


    public class Orange implements Fruit{
    @Override
    public String getTaste() {
    return "我的味道有点酸";
    }

    @Override
    public String getName() {
    return "我的名字叫橘子";
    }
    }

    //工厂类


    public class FruitFactory {
    public static Fruit createFruit(String fruitName){
    Fruit fruit=null;
    switch (fruitName){
    case "apple":
    fruit=new Apple();
    break;
    case "orange":
    fruit=new Orange();
    break;
    default:
    System.out.println("没有匹配的水果可生产");
    break;
    }
    return fruit;
    }
    }

       这样通过这个工厂就能由客户决定生产什么水果


    public class Customer {
    public static void main(String[] args) {
    Fruit fruit=FruitFactory.createFruit("apple");
    System.out.println(fruit.getName());
    System.out.println(fruit.getTaste());
    Fruit origin=FruitFactory.createFruit("orange");
    System.out.println(origin.getName());
    System.out.println(origin.getTaste());

    }
    }

    这样就能得到客户想要的东西,而客户并不知道如何实现的生产过程

    但是也有一个缺点就是,老板过来说,我们的销量太好了,准备添加其他水果,小李啊你来搞一下,小李一看,这没办法只能改源代码啊,于是乎就违反了开闭原则。

    所谓的开闭原则,就是写完的代码不要老改动,而是去拓展

    这也就是简单工厂模式的缺点

    进而出现了工厂模式,工厂模式是简单工厂模式的拓展和抽象

  • 相关阅读:
    .NET平台下WEB应用程序的部署(安装数据库和自动配置)(转)
    关于动网 ASP + Access 论坛问题及相应解决办法
    Visual 2005 调试问题 收藏
    休假一个月
    Log4j进行日志操作
    自动定时备份数据
    最近很有心情
    网站建设尺寸规范
    log4net 1.2.9 的配置及使用
    DataGrid表头跨行合并的实现
  • 原文地址:https://www.cnblogs.com/qxhn/p/9124383.html
Copyright © 2011-2022 走看看